如果我有一个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))
答案 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))
请注意,此解决方案将忽略边缘情况,例如空输入或不相等的数组大小。