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