如何创建自定义列表累加器,即List [(Int,Int)]?

时间:2016-01-14 19:58:04

标签: scala apache-spark accumulator

我正在尝试在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)

导致错误。请帮忙。

2 个答案:

答案 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]您仍然可以创建该类的多个实例,但它们实际上是相似的。