(电商项目实战)Spark累加器AccumulatorV2

本文介绍了Spark2.x中AccumulatorV2的使用,它替代了旧版的accumulator。AccumulatorV2是仅支持累加操作的变量,常用于并行计算中的计数和总和计算。累加器存在于Driver端,各工作节点将值发送到Driver端累加。自定义累加器类型在2.0版本后变得更为便捷,通过AccumulatorV2抽象类可以更轻松地实现。使用累加器时,必须确保通过action操作获取最终结果,否则可能需要截断之前的依赖,如使用cache或persist。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spark2.x AccumulatorV2(累加器)

Spark2.x之后,之前的的accumulator被废除,用AccumulatorV2代替;
累加器(accumulator):Accumulator是仅仅被相关操作累加的变量,因此可以在并行中被有效地支持。它们可用于实现计数器(如MapReduce)或总和计数。
Accumulator是存在于Driver端的,从节点不断把值发到Driver端,在Driver端计数(Spark UI在SparkContext创建时被创建,即在Driver端被创建,因此它可以读取Accumulator的数值),存在于Driver端的一个值,从节点是读取不到的。
Spark提供的Accumulator主要用于多个节点对一个变量进行共享性的操作。Accumulator只提供了累加的功能,但是却给我们提供了多个task对于同一个变量并行操作的功能,但是task只能对Accumulator进行累加操作,不能读取它的值,只有Driver程序可以读取Accumulator的值
自定义累加器类型的功能在1.X版本中就已经提供了,但是使用起来比较麻烦,在2.0版本后,累加器的易用性有了较大的改进,而且官方还提供了一个新的抽象类AccumulatorV2来提供更加友好的自定义类型累加器的实现方式

注意:用累加器的过程中只能使用一次action的操作才能保证结果的准确性,否则,要使用cache,persist将之前的依赖截断。不然你action第二次,将会连着第一次的结果加上

isZero: 当AccumulatorV2中存在类似数据不存在这种问题时,是否结束程序。 
copy: 拷贝一个新的AccumulatorV2 
reset: 重置AccumulatorV2中的数据 
add: 操作数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值