Как объединить значения из набора RDD? - PullRequest
0 голосов
/ 09 сентября 2018

Если у меня есть 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 голосов
/ 09 сентября 2018

Если я правильно понимаю, вы хотите, чтобы все записи в СДР имели одинаковое значение , причем это значение является массивом результатов побитовой операции ИЛИ для каждого индекса массивов.

В этом случае вы можете начать с действия reduce для вычисления этого единственного значения, а затем сопоставить исходный СДР с новым значением с этим новым значением для всех записей:

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))

Обратите внимание, что это решение игнорирует крайние случаи, такие как пустой ввод или неравные размеры массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...