Accumulator

累加器是只写变量,可以使用 SparkContext.accumulator 创建:

val accumulator = sc.accumulator(0, name = "My accumulator") // name is optional

+= 修改:

val someRDD = sc.parallelize(Array(1, 2, 3, 4))
someRDD.foreach(element => accumulator += element)

并使用 value 方法访问:

accumulator.value // 'value' is now equal to 10

使用累加器很复杂,Spark 的转换运行至少一次保证。如果由于任何原因需要重新计算转换,则将重复该转换期间的累加器更新。这意味着累加器值可能与任务仅运行一次时的累加器值非常不同。

注意:

  1. 执行者无法读取累加器的值。只有驱动程序可以使用其 value 方法读取累加器的值。
  2. 它与 Java / MapReduce 中的计数器几乎相似。因此,你可以将累加器与计数器相关联,以便轻松理解它