scala中列表中唯一标记值的聚合数据

时间:2015-07-01 10:57:45

标签: scala apache-spark aggregate

我想知道是否有人可以提供帮助。

我正在尝试根据id值聚合列表中的一些数据,我有一个listBuffer,它是从foreach函数更新的。我的输出意味着我有一个id号和一个值,因为foreach经常多次对每个id应用一个函数,我最终得到的列表如下所示:

ListBuffer(3106;0, 3106;3, 3108;2, 3108;0, 3110;1, 3110;2, 3113;0, 3113;2, 3113;0)

我想要做的是应用一个简单的函数来聚合这些数据,所以我留下了

List(3106;3 ,3108;2, 3110;3, 3113;2)

我认为可以使用foldLeft或groupBy来完成,但是我不知道如何让它识别id值和正常值。

非常感谢任何帮助或指示

1 个答案:

答案 0 :(得分:0)

首先,您不能以这种方式对键值对进行分组。在scala中,你有一些写成

的元组

val pair: (Int, Int) = (3106,3),其中

pair._1 == 3106
pair._2 == 3 

是真实的陈述。

所以你有:

  val l = ListBuffer((3106,0), (3106,3), (3108,2), (3108,0), (3110,1), (3110,2), (3113,0), (3113,2), (3113,0))

  val result = l.groupBy(x => x._1).map(x => (x._1, x._2.map(_._2))).map(x => (x._1, x._2.sum)).toList

  println(result)

会给你

List((3106,3), (3108,2), (3110,3), (3113,2))