2017-12-26 25 views
0

私は2つのRDDを持っています。データフレームを使用せずにキーを一致させ、2つのRDDをpysparkに参加させる

IはRDD2における第3フィールド(3,1,2)などでRDD 1の最初のフィールドを使用して上記2 RDDの(1,2)などに参加し、新しい出力に書き込まれた行にマッチ取得する必要が
RDD 1: 
[['1', 'user1', 'Name1'], 
['2', 'user4', 'Name2']] 

RDD 2: 
[['5', '1a', '3', '99', 'g1'], 
['11', '2b', '1', '99', 'g2'], 
['12', '3c', '2', '99', 'g3']] 

RDDの両方が利用可能な場合に限ります。実行できる結合操作があることはわかっています。どのように確かではありません。

Required output 
[['1','Name1'], 
['2','Name2']] 

これを進めるにはどうすればよいですか?データフレームを使用せずにこれを行う方法はありますか?

同様の質問の回答は、理想的な解決策を見つけるのに役立ちませんでした。だから私は再度クエリを投稿しなければならなかった。

+1

特定のキーによる[pyspark join rdds]の可能な複製(https://stackoverflow.com/questions/42821955/pyspark-join-rdds-by-a-specific-key) – philantrovert

答えて

3

RDDに参加することもできます。このコードは、あなたが望むものを正確に提供します。

tuple_rdd1 = rdd1.map(lambda x: (x(0), x(2))) 
tuple_rdd2 = rdd1.map(lambda x: (x(2), 0))) 
result = tuple_rdd1.join(tuple_rdd2).map(lambda x: [x[0], x[1][0] ]) 

第1行目は、rdd1のキーと名前を選択します。 2行目はrdd2の3番目の列を選択し、最後の行は2つを結合し、結果を目的の形式にします。

+0

ありがとうございました。これは問題を解決しました。 tuple_rdd2 = rdd1.map(ラムダx:(x(2)、0))のキーは0です)。私は範囲外の問題のインデックスを取得していましたが、この解決策はそれを解決しました。 –

関連する問題