2017-06-05 87 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 

我不`噸看看問題出在哪裏..

+0

如果'dataframe'一些分佈方面,如火花,總是remeber代碼可以執行的問題另一臺機器。所以千萬不要使用var,使用其他api代替 – jilen

回答

0

我想知道你的for循環是如何工作的,沒有你收集filterPdataframefor循環只是transformationprintln不應該沒有在dataframeaction沒有執行。

Dataframes由dafault分區,我猜測你的dataframe是分區的,你只能得到部分輸出。

收集dataframedriver要解決

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

它的工作!非常感謝你!!我從scala開始。 –

+0

這是個好消息:)爲你感到高興 –

2

它絕對有權訪問var內部循環。

  • 也許你有一個名爲grupo
  • 也許你循環完全不符合條件的循環中單獨的變量,這意味着dataframe是空的。
  • 嘗試在您的循環內打印a進行調試。

看到的例子,

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

我編輯問題。 –