Какая функция в spark используется для объединения двух rdds по клавишам

предположим, у меня есть следующие два RDDs со следующими значениями пары ключей.

rdd1 = [ (key1, [value1, value2]), (key2, [value3, value4]) ]

и

rdd2 = [ (key1, [value5, value6]), (key2, [value7]) ]

Теперь я хочу присоединиться к ним по ключевым значениям, поэтому, например, я хочу вернуть следующее

ret = [ (key1, [value1, value2, value5, value6]), (key2, [value3, value4, value7]) ] 

как я могу это сделать, в spark с помощью Python или Scala? Один из способов - использовать join, но join создаст кортеж внутри кортежа. Но я хочу иметь только один кортеж за пару.

2 ответов


Я бы объединил два RDDs и reduceByKey, чтобы объединить значения.

(rdd1 union rdd2).reduceByKey(_ ++ _)

просто использовать join а то map результирующий rdd.

rdd1.join(rdd2).map(case (k, (ls, rs)) => (k, ls ++ rs))