2017-01-08 11 views
-1

これは既に質問されていますが、回答を正しく理解できませんでした。Apache Sparkで2つのRDDに参加する

RDD_FINAL(col1,col2,col3,colA,colB,colC) 

があります:

は、私は次のようにそれらを結合する必要が同じ列数やレコード

RDD1(col1,col2,col3) 

RDD2(colA,colB,colC) 

の同じ番号を持つ2 RDDSを持っていますkeyレコード間の結合を実行するが、それらは順番に並んでいる。つまり、RDDの最初のレコード1はRDD2の第1のレコードに対応する。

+0

RDDは行の内部順序を保持しません。あなたの質問は率直に答えるにはかなり広いです。あなたの質問を見直してください! – eliasah

+0

また、SOの質問方法についてもお読みください。 http://stackoverflow.com/help/how-to-ask – eliasah

+0

@eliasah回答してガイドをいただきありがとうございました...実際にはこれらの2つのrddは2つの異なるテキストファイルから来ています...私が必要とする唯一のことは、カラム... 1つの理由は、 "col1とcolA"を比較することです...私は私のデータセットがsqlのプライマリキーのようなIDキーを持っていないが、結合操作を試したいと思った。 –

答えて

0

zipWithIndexメソッドを使用して、両方のRDDのキーとして行のインデックスを追加し、キーでそれを結合することができます。

+0

これは有用な答えですが、私は十分な評判を持っていないので評価できません....ありがとうございます@ Alfilercio –

0

Alfilercioの例​​のコードスニペットを追加します。

JavaRDD<col1,col2,col3> rdd1 = ... 
JavaPairRDD<Long, Tuple3<col1,col2,col3>> pairRdd1 = rdd1.zipWithUniqueId().mapToPair(pair -> new Tuple2<>(pair._2(),pair._1()); 

JavaRDD<colA,colB,colC> rdd2 = ... 
JavaPairRDD<Long, Tuple3<colA,colB,colC>> pairRdd2 = rdd2.zipWithUniqueId().mapToPair(pair -> new Tuple2<>(pair._2(),pair._1()); 

JavaRDD<Tuple2<Tuple3<col1, col2, col3>, Tuple3<colA,colB,colC>>> mappedRdd = pairRdd1.join(pairRdd2).map(pair -> pair._2()); 
関連する問題