2016-04-01 18 views
1

3つのRDD配列[文字列]を連結する方法はありますか?私はScalaを初めて使いました。私はまだ新しい技術を学んでいます。私は最初の行に最初の列を追加する必要があり、スカラ、RDD配列[文字列]連結

RDD1 = ['string1', 'string2', 'string3'] 
    RDD2 = ['stringa', 'stringb', 'stringc'] 
    RDD3 = ['stringA', 'stringB', 'stringC'] 

しかしトリックがある:

私はこのようになります3つのRDDアレイ[文字列]を持っています。 ので、連結した後、それは次のようになります。私は .union

を使用する場合

RDD = ['string1', 'stringa', 'stringA' 
     'string2', 'stringb', 'stringB' 
     'string3', 'stringc', 'stringC'] 

ちょうど私にこれを与えること:

['string1', 'string2', 'string3' 
'stringa', 'stringb', 'stringc', 
'stringA', 'stringB', 'stringC'] 

は、これを実現する方法はありますか?定期的なScalaで

答えて

0

は、あなたのような、transposeでそれを行うことができます:

Array(r1, r2, r3).transpose.flatten 

私はスパークに非常に慣れていないんだけど、私はtransposeが利用可能であるとは思いません。あなたはあなただけの3×3が必要知っている場合は、あなたと同じ結果を得ることができます。

r1 zip r2 zip r3 flatMap {case ((a, b), c) => Array(a,b,c)} 

あなたはどのnxnに一般化する必要がある場合、それは再帰的なアルゴリズムを必要とするようになるだろう。

0

したがって、3つのrddの最初の行を一緒にしたいとします。 最初に 'zipwithindex'を実行し、あなたのrddの3つのインデックスに基づいて参加することで簡単に行うことができます。 rddに注文が入っていないので、同じレコードにしたいと思っています。