spark累加器

应用场景

累加器的定义和应用场景很好理解,分布式场景下,我们希望对一个数进行全局性的累加,但由于我们的定义的普通全局变量,到各个分区只是一个副本,且不会影响driver处本身的全局变量值,在执行rdd计算的时候只是在各分区实现了自己的累加,并不能最终体现到driver定义的变量本身,因此spark引入了累加器,spark的累加器也是在各自的分区中累加,但在执行collect操作的时候会对各分区累加之和再做一次累加

if __name__ == '__main__':
    conf = SparkConf().setAppName("test").setMaster("local[*]")
    sc = SparkContext(conf=conf)
    rdd = sc.parallelize([1,2,3,4,5,6,7,8,9,10],2)
    #Spark提供的累加器变量,参数是初始值
    acmlt = sc.accumulator(0)
    def map_func(data):
        global acmlt
        acmlt +1
        print(acmlt)
    print(acmlt)

注意事项

在使用累加器时,需要注意的是,如果我们的rdd被释放掉了又重新构建(没有缓存会重新构建),这时累加器会多次工作,可能会导致非预期结果。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值