2017-02-02 7 views
-1

私はスカラーが初めてです。私はRDDを反復し、各値を配列または他のコレクションに格納しています。しかし、値はArray内に格納されていません。配列や他のコレクションのRDDとストアド値をスカラのスパークで繰り返す

val ItrRdd = sqlContext.sql("select district,state FROM world ").rdd 
var ItrRdd_data = ItrRdd.map { x => 
     (x.getString(0), x.getString(1)) 
    } 

var district = Array[String]() 

ItrRdd_data.map{ x => 
     district.+:(x._1) 
    } 

その後、私は地区を印刷する場合、それは空白になります。 誰かがこれを行うのに役立ちますか他の人に似ていますか?

ありがとうございます。

+1

1. '+計算を取得するには、以下を使用します:'それは新しい配列を作成し、 'district'を変更しませんが。 2. http://spark.apache.org/docs/latest/programming-guide.html#understanding-closures-a-nameclosureslinkaを読んでください。 –

+0

それは....かもしれないが、私は配列が値で埋める必要があります。 –

+0

問題1が修正されても、これはSparkであるため、やはりうまくいきません。OPは変数 'district'を使用できず、作品全体に分散されることを期待しています。 OP:あなたは '地区 'のためのRDDを作り(その後' 'collect()' ')やソルトインはあまり好きではありません)、アキュムレータを使う必要があります。 –

答えて

0

district

val district = ItrRdd_data.map({ case(x,y) => x -> y }).collect() 
+0

で繰り返し質問だけでアプリケーションを開発することはできませんHi @ rogue-oneこれも動作しますが、私は両方の列が同じ順序。次に、上記の方法を使用すると、両方の配列内のデータの順序がマスター表にないために異なる可能性があります。 –

+0

@DarshanManek私は両方の列を持っている答えを更新しました..もしあなたが列の変更の順​​序が気になっていれば、それらは変更されません。あるいは、行の順序を同じにしたいと思っていますか? –

+0

それから私は2つ以上のフィールドがある場合。それでは、どうすればいいのですか? –

関連する問題