Как я могу использовать reduByKey от искры для суммирования целых чисел в списке? - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть (ключ, значение), значение которого равно списку целых чисел внутри списка. Я имею в виду:

(Key, Value) = ("aaa", [ [1,2,3],[1,1,1] ])

Я хочу, чтобы при нажатии кнопки Reduction суммировалось каждое значение той же позиции, как показано ниже:

("aaa", [1+1,2+1,3+1])

Каков наилучший способ сделать это, используя функцию reduceBykey?

Спасибо!

1 Ответ

0 голосов
/ 11 ноября 2019

Хотя я не уверен, почему здесь нужно использовать reduByKey, но я предоставляю свое решение на основе моего понимания.

import sparkSession.implicits._
def col2sum(x:Array[Int],y:Array[Int]):Array[Int] = {
     x.zipAll(y,0,0).map(pair=>pair._1+pair._2)
}
val kvData = sparkSession.sparkContext.parallelize(Seq(("aaa", Array(Array(1, 2, 3), Array(1, 1, 1)))))
val output = kvData.map(data => (data._1, data._2.reduce(col2sum)))

Преобразование в DataFrame для проверки результатов:

output.toDF("field_1", "field_2").show()
+----+---------+
|ddff|    dffhj|
+----+---------+
| aaa|[2, 3, 4]|
+----+---------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...