2016-10-31 5 views
1

私は特定のscala-spark構文に固執しています。正しい方向に私を導くことができれば嬉しいです。RDD1の特定の要素を選択する

RDD1タイプの配列[((フロート、フロート、フロート)、ロング)]、

RDD1.collect =配列の場合((X1、Y1、Z1)が、1)、((X2、Y2、 Z2)、2)、((X3、Y3、Y3)、3)、...)

とRDD2タイプ、配列[ロング]のインデックスであり、

RDD2.collect =アレイ(1 、3、5 ...)

RDD2にインデックスがあるRDD1から値を抽出する最良の方法はありますか。 (x3、y3、y3)、3)、(x5、y5、y5)、...) 出力、配列((x1、y1、z1)、1)、(x3、y3、y3)、...)

両方RDD1とRDD2は十分に大きく、私は.collectの使用を避けたいと考えています。さもなければ、問題は単に2つのスカラー配列/リストに交差する要素を見つけることです。

ご協力いただきありがとうございます。

答えて

1

PairRDDにはjoinという機能があります。これはここで使用します。

// coming in, we have: 
// rdd1: RDD[((Float, Float, Float), Long)] 
// rdd2: RDD[Long] 

val joinReadyRDD1 = rdd1.map { case (values, key) => (key, values) } 
val joinReadyRDD2 = rdd1.map { key => (key,()) } 
val joined = joinReadyRDD1.join(joinReadyRDD2).mapValues(_._1) 

これはLongキーがrdd2に登場RDD[(Long, (Float, Float, Float))]を返します。

概念的な「キー」と「値」がある場合は、まずキーを入力します。上にリンクしたPairRDDFunctionsを見てください。かなり豊富なAPIです。すべてRDD[(Key, Value)]を使用しています。

関連する問題