如何在RDD中对列表的一部分求和

时间:2017-12-23 02:40:18

标签: scala apache-spark rdd scala-2.10

我有一个RDD,我想总结列表的一部分。

(1, 7.0), (2, -3.0)

输出应该如下所示,

{{1}}

由于

2 个答案:

答案 0 :(得分:1)

您可以map并在第二部分编制索引:

yourRddOfTuples.map(tuple => {val list = tuple._2; list(1) + list(2)})

在评论后更新,将其转换为Vector

yourRddOfTuples.map(tuple => {val vs = tuple._2.toVector; vs(1) + vs(2)})

或者如果您不想使用转化:

yourRddOfTuples.map(_._2.drop(1).take(2).sum)

这会从元组的第二个元素(.drop(1))中跳过第一个元素(.map(_._2),接下来的两个元素(.take(2))(如果你有更少的话可能会少一些)并总结(.sum)。

答案 1 :(得分:1)

您可以map键列表对获取第二个和第三个列表元素,如下所示:

val rdd = sc.parallelize(Seq(
  (1, List(2.0, 3.0, 4.0, 5.0)),
  (2, List(1.0, -1.0, -2.0, -3.0))
))

rdd.map{ case (k, l) => (k, l(1) + l(2)) }.collect
// res1: Array[(Int, Double)] = Array((1,7.0), (2,-3.0))