0

これを可能な限り短い文で説明する方法がよくわかりませんが、とにかく試してみます。dataという変数に、この形式の RDD があるとします。

(a,b,c)

b と c は、前の RDD 変換の結果の配列です。特定の条件に基づいて、RDD を変換して、b または c から 1 列のみを取得したいと考えています。RDD を格納するための一時変数の宣言に問題があります。

val data = sc.textFile("1.txt").map(_.split(",",-1))
//var new_data:RDD= null??? what data type should i use??
if(x ==1){
    new_data = data.map{ (a,b,c) => ( b(x) ) }
}else if( x==2 ){
    new_data = data.map{ (a,b,c) => ( c(x) ) }
}
//several more if statement here similar to the two above

//need to use new_data here

if文内でvalを使って new_data を宣言すると、if 文の範囲外になります。var を使用してみましたが、初期化する方法がわかりません。タイプMappedRDDおよびRDDのvarを使用してみましたが、マップ操作の値をそれに割り当てることができないようです。

4

1 に答える 1

3

if を関数にラップします。デュゥゥゥゥゥゥ!! ごめん。関数型プログラミングの初心者。投稿する前にもっと考えるべきだった。コードは次のようになります。

val new_data = { 
   if(x ==1){ data.map{ (a,b,c) => ( b(x) ) }         
   else if( x==2 ){ data.map{ (a,b,c) => ( c(x) ) 
} 
于 2014-07-12T00:30:03.757 に答える