如何合并RDD集合中的值?

时间:2018-09-09 06:53:55

标签: scala apache-spark set

如果我有一个RDD[(Int, Array[Boolean])],我该如何合并每个集合中的值?

例如

如果我的RDD是:

(1, Array(true, false, true)) (2, Array(true, true, false)) 

我想要作为结果

(1, Array(true, true, true)) (2, Array(true, true, true))

1 个答案:

答案 0 :(得分:0)

如果我正确理解这一点,那么您希望RDD中的所有记录都具有相同的,该值是对数组的每个索引进行按位或运算的结果的数组。

在这种情况下,您可以从reduce操作开始计算此单个值,然后将原始RDD映射到具有此新值的所有记录的新RDD:

val newVal = rdd.values.reduce((a1, a2) => a1.zip(a2).map { case (b1, b2) => b1 | b2 })
val result = rdd.mapValues(_ => newVal)

result.mapValues(_.toList).foreach(println) 
// prints:
// (1,List(true, true, true))
// (2,List(true, true, true))

请注意,此解决方案将忽略边缘情况,例如空输入或不相等的数组大小。