按键和StatCounter进行高效分组

时间:2016-02-05 19:24:39

标签: scala apache-spark

我使用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))

1 个答案:

答案 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)
)