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 中的計數器幾乎相似。因此,你可以將累加器與計數器相關聯,以便輕鬆理解它