我想做这样的事情。
val ac = sc.accumulator(0)
....
a = a.map(x => someFunction(x, the_accumulator_object))
....
上面代码中the_accumulator_ojbect
的位置应该是什么?写ac
会不会很好?
另外,在函数中
def someFunction(x: TypeOfX, a: TypeOfAccumulator) : ReturnType =
{
.....
}
上述函数中TypeOfAccumulator
的位置应该是什么?
答案 0 :(得分:5)
有关Spark累加器的其他信息,请访问here
根据有关创建累加器的scala-docs:
/ ** *创建一个[[org.apache.spark.Accumulator]]变量 给定类型,在Spark UI中具有display *的名称。任务可以 使用
+=
方法将“添加”值添加到累加器。只有 * 驱动程序可以访问累加器的value
。 * /
默认累加器类型为int
。您可以设置自己的类型,但需要正确实现+=
方法以将值添加到您自己的累加器类型中:
val ac = sc.accumulator[MyOwnType](MyOwnTypeObject, "my own type object accumulator")
您的主要代码片段如下:
val ac = sc.accumulator(0, "some accumulator")
....
a = a.map(x => someFunction(x, ac))
....
System.out.println("My accumulator value is: " + ac.value)
someFunction
方法的植入方式如下:
def someFunction(x: TypeOfX, ac: Accumulator[Int]) : ReturnType =
{
...
ac += 1
...
}