2017-06-05 5 views
1

Haben Sie keinen Zugriff auf var in loop. Warum? Vielen Dank.Weisen Sie var in loop einen neuen Wert zu

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

Bearbeiten!

Datenrahmen filterP zeigen wie folgt aus:

| 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| 

Code:

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)) 
    } 

Dieser Druck:

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

I don `t sehen, wo ist das Problem ..

+0

, wenn 'dataframe' wird einige verteilte Kontext wie Funken, immer remeber dieser Code ausgeführt wird, kann auf eine andere Maschine. Also benutze nie var, benutze andere api anstatt – jilen

Antwort

0

Ich frage mich, wie Sie Ihre for Schleife arbeitet, ohne dass Sie die filterPdataframe zu sammeln. for Schleife ist nur transformation und println sollte nicht ohne eine action auf der dataframe ausgeführt haben.

Dataframes sind von Dafault partitioniert und ich rate ist, dass Ihre dataframe partitioniert ist und Sie nur Teilausgabe erhalten.

dataframe zum driver sammeln sollte das Problem lösen

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)) 
} 

ich die Ausgabe als

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

Es ist Arbeit! Vielen Dank!! Ich beginne mit Scala. –

+0

Das sind gute Nachrichten :) glücklich für dich –

2

Es hat definitiv Zugriff auf var innerhalb der Schleife.

  • Vielleicht haben Sie eine separate Variable in einem grupo oder
  • genannt Schleife vielleicht wird Sie Schleife nicht die Bedingungen überhaupt zu treffen, was bedeutet, dataframe leer.
  • versuchen, a innerhalb Ihrer Schleife zu debuggen.

siehe das Beispiel,

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

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

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

Dein Beispiel funktioniert. Ich verstehe nicht, was passieren könnte. Ich werde die Frage mit dem ursprünglichen Code bearbeiten. Vielen Dank –

+0

@ J.M.P.R. Kannst du den Wert von 'Dataframe' posten? Ich versuche auch, 'println (a) 'innerhalb der Schleife zu schreiben. – prayagupd

+0

Ich bearbeite die Frage. –

Verwandte Themen