我使用apache-spark和scala通过参数聚合值。 这会不断向" List"添加值。 是否有更有效的方法来获取按键和StatCounter列表?
val predictorRawKey = predictorRaw.map { x =>
val param = x._1
val val: Double = x._2.toDouble
(param, val)
}.mapValues(num => List( num) )
.reduceByKey((l1, l2) => l1 ::: l2)
.map { x => x._1, StatCounter(x._2.iterator))
答案 0 :(得分:1)
对于初学者,您不应使用reduceByKey
对值进行分组。省略地图侧聚合并直接使用groupByKey
更有效。
幸运的是,StatCounter
可以以流式方式工作,并且根本不需要对值进行分组:
import org.apache.spark.util.StatCounter
val pairs = predictorRawKey.map(x => (x._1, x._2.toDouble))
val predictorRawKey = pairs.aggregateByKey(StatCounter(Nil))(
(acc: StatCounter, x: Double) => acc.merge(x),
(acc1: StatCounter, acc2: StatCounter) => acc1.merge(acc2)
)