获得总和并选择最大键值对,并在spark scala中进行并行化

时间:2018-05-16 20:52:54

标签: scala

我有一个Seq(字符串),如下所示,我需要按键减少

val sq = Seq("a:5", "b:6", "c:10", "a:12", "c:8", "b:11")

我不想使用parallelize,因为我必须为数据集中的每条记录执行此操作。我需要如下结果,键的总和,我选择最大键值。

result: Seq("c:18")

提前致谢

1 个答案:

答案 0 :(得分:1)

sq.map{ str =>
  val Array(k, v) = str.split(":")
  (k, v.toInt)
}.groupBy(_._1).map{ case (k, kvs) =>
  (k, kvs.map(_._2).sum)
}.maxBy(_._2)
  1. 将字符串解析为(String, Int)对(第一个map
  2. 按字符串(groupBy
  3. 分组
  4. 对每个组中的值求和(第二个map
  5. 找到具有最大值(maxBy
  6. 的那个