我有一个RDD,我想总结列表的一部分。
(1, 7.0), (2, -3.0)
输出应该如下所示,
{{1}}
由于
答案 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))