我正在尝试在Apache Spark中使用自定义累加器来累积列表中的对。
结果应为List[(Int, Int)]
类型。为此我创建自定义累加器:
import org.apache.spark.AccumulatorParam
class AccumPairs extends AccumulatorParam[List[(Int,Int)]] {
def zero(initialValue: List[(Int,Int)]): List[(Int,Int)] = {
List()
}
def addInPlace(l1: List[(Int,Int)], l2: List[(Int,Int)]): List[(Int,Int)] = {
l1 ++ l2
}
}
然而,我不能实例化这种类型的变量。
val pairAccum = sc.accumulator(new List():List[(Int,Int)])(AccumPairs)
导致错误。请帮忙。
答案 0 :(得分:1)
这个有效:
val pairAccum = sc.accumulator(List[(Int,Int)]())( new AccumPairs)
答案 1 :(得分:1)
没有参数的类没有多大意义(如果有的话),因为你“隐式地”创建单个值 1 。将关键字class
更改为object
,您的示例将有效。
更改
class AccumPairs extends AccumulatorParam[List[(Int,Int)]] {
到
object AccumPairs extends AccumulatorParam[List[(Int,Int)]] {
[1]您仍然可以创建该类的多个实例,但它们实际上是相似的。