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 的转换运行至少一次保证。如果由于任何原因需要重新计算转换,则将重复该转换期间的累加器更新。这意味着累加器值可能与任务仅运行一次时的累加器值非常不同。
注意:
- 执行者无法读取累加器的值。只有驱动程序可以使用其 value 方法读取累加器的值。
- 它与 Java / MapReduce 中的计数器几乎相似。因此,你可以将累加器与计数器相关联,以便轻松理解它