Ответ 1
Я бы объединил два RDD и к reduceByKey, чтобы объединить значения.
(rdd1 union rdd2).reduceByKey(_ ++ _)
Скажем, у меня есть следующие два RDD со следующими значениями пары ключей.
rdd1 = [ (key1, [value1, value2]), (key2, [value3, value4]) ]
и
rdd2 = [ (key1, [value5, value6]), (key2, [value7]) ]
Теперь я хочу присоединиться к ним по ключевым значениям, поэтому, например, я хочу вернуть следующие
ret = [ (key1, [value1, value2, value5, value6]), (key2, [value3, value4, value7]) ]
Как я могу это сделать, используя искрообразование с помощью Python или Scala? Один из способов - использовать join, но join создаст кортеж внутри кортежа. Но я хочу иметь только один кортеж для пары значений ключа.
Я бы объединил два RDD и к reduceByKey, чтобы объединить значения.
(rdd1 union rdd2).reduceByKey(_ ++ _)
Просто используйте join
, а затем map
полученный rdd.
rdd1.join(rdd2).map(case (k, (ls, rs)) => (k, ls ++ rs))