2017-05-01 7 views
0

キー/値RDDを持っています。その中のエンティティを「反復処理」し、キー/値を作成し、別のものに作成またはマップする第1のRDDより多かれ少なかれエントリを有することができるRDD。Spark RDDを使用して別のRDDを作成またはマッピングする方法

例:

私は絵の色の観察結果を表すaccumulo内のレコードを持っています。 観測エンティティ/オブジェクトには、ペイント名とペイントの色に関するデータが保持されます。

私は、累積からの観測をRDDとして自分のコードにプルします。

val observationRDD: RDD[(Text, Observation)] = getObservationsFromAccumulo(); 

私はこのRDDを取ると、キーが観察される色で、値が色が観察された絵の名前です(色、paintingName)の形のRDDを作成したい。

私は働くことができないマップを知って
val colorToPaintingRDD: RDD[(String, String)] = observationRDD.somefunction({ case (_, observation) => 
    for(String color : observations.getObservedColors()) { 
     // Some how output a entry into a new RDD 
     //output/map (color, observation.getPaintingName) 
}) 

、その1から1が、私は多分observationRDD.flatmap(いくつかの機能を)考えたが、新しいを作成するためにそれを行う方法上の任意の例を見つけるように見えることはできませんので、大きくしたり小さく、RDD。

フラットマップが正しいかどうか私に助けてくれますか?この例を使用して私が提供した例を教えてください。

これは単なる簡単な例であり、コンテンツの内容ではなく、RDDを多かれ少なかれエントリに変換する方法を理解してください。

答えて

0

フラットマップを使用し、RDDでList [(String、String)] foreach要素を返す必要があります。 FlatMapはフラットな結果とあなたはRDD [(文字列、文字列)]

を得るでしょう、私は、コードをしようとしなかっただろうが、それはこのようなものになるだろう:getObservedColors方法ならばおそらく

val colorToPaintingRDD: RDD[(String, String)] = observationRDD.flatMap { case (_, observation) => 
    observations.getObservedColors().map(color => (color, observation.getPaintingName)) 
} 

JavaでJavaConversionsをインポートしてスカラーリストに変更する必要があります。

import scala.collection.JavaConversions._ 
observations.getObservedColors().toList 
+0

これは私が必要としていたものです。ありがとうございます! – JediKid

関連する問題