web-dev-qa-db-fra.com

Quelle fonction dans spark est utilisée pour combiner deux RDD par clés

Disons que j'ai les deux RDD suivants, avec les valeurs de paire de clés suivantes.

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

et

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

Maintenant, je veux les joindre par des valeurs clés, donc par exemple, je veux retourner ce qui suit

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

Comment puis-je faire cela, dans spark using Python ou Scala? Une façon consiste à utiliser join, mais join créerait un tuple à l'intérieur du tuple. Mais Je veux avoir un seul tuple par paire de valeurs clés.

18
MetallicPriest

J'unirais les deux RDD et à un ReduceByKey pour fusionner les valeurs.

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

Utilisez simplement join puis map le rdd résultant.

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