如何对RDD中列表的一部分求和
How to Sum a part of a list in RDD
我有一个RDD,我想对列表的一部分求和。
(key, element2 + element3)
(1, List(2.0, 3.0, 4.0, 5.0)), (2, List(1.0, -1.0, -2.0, -3.0))
输出应该是这样的,
(1, 7.0), (2, -3.0)
谢谢
您可以 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)
这会从元组的第二个元素 (.map(_._2
) 跳过第一个元素 (.drop(1)
),取下两个 (.take(2)
)(如果您有less) 并对它们求和 (.sum
).
您可以map
key-list pair获取第2和第3个列表元素如下:
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))
我有一个RDD,我想对列表的一部分求和。
(key, element2 + element3)
(1, List(2.0, 3.0, 4.0, 5.0)), (2, List(1.0, -1.0, -2.0, -3.0))
输出应该是这样的,
(1, 7.0), (2, -3.0)
谢谢
您可以 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)
这会从元组的第二个元素 (.map(_._2
) 跳过第一个元素 (.drop(1)
),取下两个 (.take(2)
)(如果您有less) 并对它们求和 (.sum
).
您可以map
key-list pair获取第2和第3个列表元素如下:
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))