Scala如何通过引用传递累加器?

Scala如何通过引用传递累加器?,scala,apache-spark,pass-by-reference,pass-by-value,accumulator,Scala,Apache Spark,Pass By Reference,Pass By Value,Accumulator,我试图更新函数内部的累加器,但需要知道函数外部已更新累加器值的值,该值返回不同的值(基于函数的属性) 我正在做: def test(value: Any, counter : Accumulator[Double]): String = { try { // do something counter+= 1 println("counter = "+ counter) } } return string } 当

我试图更新函数内部的累加器,但需要知道函数外部已更新累加器值的值,该值返回不同的值(基于函数的属性)

我正在做:

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)
函数内部的计数器得到正确更新,但函数外部的计数器没有得到正确更新

注意

累加器是执行器的只读变量。它们可以由执行者添加到,并且只能由驱动程序读取

在您的代码中,
+=
驱动程序中被调用,因此您应该在
执行器中调用它

如果只需要调用
test
一次,可以使用以下方法:

sc.parallelize(Array(1)).foreach(x => test(x, counter))

我需要为Dataframe中的所有行调用test。我使用以下命令:df.rdd.map({dosomthing…test(..)}