2017-06-05 4 views
1

ループ内でvarにアクセスできません。どうして?ありがとう。ループ内でvarに新しい値を代入する

var grupo = "A" 
    for (a <- dataframe) { 
     grupo = "B" 
    } 
    println(grupo) //Print A 

編集!このような

データフレームfilterpはショー:

| CODIGO|LISTA|NUMERO|OPCION|NUMERO|OP|VALOR| 
+---------+-----+------+------+------+--+-----+ 
|110111001| P| 0000|  A| 0000| 1| 1| 
|110111001| P| 0000|  A| 0000| 1| 1| 
|110111001| P| 0000|  A| 0000| 1| 2| 
|110111001| P| 0000|  A| 0000| 1| 3| 
|110111001| P| 0000|  A| 0000| 1| 1| 
|110111001| P| 0000|  B| 0000| 1| 2| 

コード:

var grupo = List(filterP.first()(3).toString()) 
    var grupo_tmp = grupo(0) 
    println("first group:" + grupo(0)) 
    for (a <- filterP) { 
     if(grupo_tmp != a(3).toString()){ 
     println(grupo_tmp + "|" + a(3).toString()) 
     grupo = a(3).toString() :: grupo 
     grupo_tmp = a(3).toString() 
     } 
    } 
    println(grupo_tmp) 
    println("Grupos de lista "+grupo.length) 
    for(i <- 0 to grupo.length-1){ 
     println("grupo: "+ grupo(i)) 
    } 

この印刷:

first group:A 
    A|B 
    A 
    Grupos de lista 1 
    grupo: A 

は、私が見 `tをどこに問題..

+0

として出力を得る上で実行することがあり別のマシン。 varを使用しないでください。代わりに他のapiを使用してください – jilen

答えて

0

、例を参照してください。 forループはtransformationであり、printlndataframeactionを付けずに実行してはなりません。

Dataframesはdafaultでパーティション化されており、私はあなたのdataframeがパーティション化されており、部分的な出力しか得られていないと推測しています。 `dataframe`は常にそのコード覚え、そのような火花のようないくつかの分散状況であれば

driverdataframeを収集することは問題に

var grupo = List(filterP.first()(3).toString()) 
var grupo_tmp = grupo(0) 
println("first group:" + grupo(0)) 
for (a <- filterP.collect) { //collect the dataframe to the driver 
    if(grupo_tmp != a(3).toString()){ 
    println(grupo_tmp + "|" + a(3).toString()) 
    grupo = a(3).toString() :: grupo 
    grupo_tmp = a(3).toString() 
    } 
} 
println(grupo_tmp) 
println("Grupos de lista "+grupo.length) 
for(i <- 0 to grupo.length-1){ 
    println("grupo: "+ grupo(i)) 
} 

を解決する必要があり、私は

first group:A 
A|B 
B 
Grupos de lista 2 
grupo: B 
grupo: A 
+0

それは仕事です!どうもありがとうございました!!私はスカラから始まっています。 –

+0

それはすばらしいニュース:)あなたのために幸せ –

2
です

間違いなく0にアクセスできますループ内の。

  • はたぶん、あなたは多分あなたのループはdataframeが空であることを意味、すべての条件をgrupo
  • という名前のループ内の別の変数満たしていないしています。
  • aをループ内に印刷してデバッグしてみてください。

は、私はあなたのforループはあなたがfilterPdataframeを収集せずに働いているか疑問に思って

scala> var grupo = "A" 
grupo: String = A 

scala> for (a <- Array("MUTATE-1", "MUTATE-2")) { grupo = a } 

scala> grupo 
res6: String = MUTATE-2 
+1

あなたの例が動作します。私は何が起こっているのか理解していない。 元のコードで質問を編集します。 ありがとうございます –

+0

@ J.M.P.R。 'dataframe'の値を投稿できますか?ループ内に 'println(a)'を入れようとしています。 – prayagupd

+0

質問を編集します。 –

関連する問題