我正在尝试更新函数内的累加器,但需要知道函数外部更新的累加器值的值,该函数返回不同的值(基于函数的属性)
我在做:
def test(value: Any, counter : Accumulator[Double]): String = {
try {
// do something
counter+= 1
println("counter = "+ counter)
}
}
return string
}
我打电话的时候:
val counter : Accumulator[Double] = sc.accumulator(0, "COUNTER")
test(A, counter)
println(counter)
函数内部的计数器正在更新,但不是函数外部的计数器。
答案 0 :(得分:1)
请注意
累加器是执行程序的只写变量。它们可以由执行程序添加,仅由驱动程序读取。
在您的代码中,+=
会调用driver
,因此您应该在executors
中调用它。
如果您只需要拨打test
一次,就可以使用以下内容:
sc.parallelize(Array(1)).foreach(x => test(x, counter))