spark源码系列之累加器实现机制及自定义累加器
一,基本概念 累加器是 Spark 的一种变量,顾名思义该变量只能增加。有以下特点: 1 ,累加器只能在 Driver 端构建及并只能是 Driver 读取结果, Task 只能累加。 2 ,累加器不会改变 Spark Lazy 计算的特点。只会在 Job 触发的时候进行相关累加操作。 3 ,现有累加器的类型。 二,累加器的使用 Driver 端初始化,并在 Action 之后获取值。 val accum = sc.accumulator( 0 , "test Accumulator" ) accum.value Executor 端进行计算 accum += 1 ; 三,累加器的重点类 Class Accumulator extends Accumulable 主要是实现了累加器的初始化及封装了相关的累加器操作方法。同时在类对象构建的时候向我们的 Accumulators 注册了累加器。累加器的 add 操作的返回值类型和我们传入的值类型可以不一样。所以,我们一定要定义好如何累加和合并值。也即 add 方法 object Accumulators: 该方法在 Driver 端管理着我们的累加器,也包含了特定累加器的聚合操作。 trait AccumulatorParam[T] extends AccumulableParam[T, T]: AccumulatorParam 的