Scala 为循环中的var分配新值

Scala 为循环中的var分配新值,scala,Scala,无法访问循环中的var。为什么?谢谢 var grupo = "A" for (a <- dataframe) { grupo = "B" } println(grupo) //Print A 代码: 我看不出问题出在哪里。它肯定可以访问var内部循环 可能在名为grupo或 可能您的循环根本不满足条件,这意味着dataframe为空 尝试在循环内打印a以进行调试 看看这个例子 scala> var grupo = "A" grupo

无法访问循环中的var。为什么?谢谢

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


我看不出问题出在哪里。

它肯定可以访问
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
scala>var grupo=“A”
grupo:String=A
scala>用于(一个grupo)
res6:String=MUTATE-2

我想知道,如果您没有收集
filterP
dataframe
for
循环,您的
for
循环是如何工作的,因为
转换
println
不应该在
数据框上执行
操作

dataframe
是由dafault进行分区的,我猜您的
dataframe
是分区的,您只能得到部分输出

数据帧
收集到
驱动程序
应该可以解决问题

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

你的例子行得通。我不明白会发生什么。我将用原始代码编辑这个问题。非常感谢much@J.M.P.R.你能发布
dataframe
的值吗?尝试使用
println(a)
内部循环也需要将
数据框
映射到收集的数据框-请参见示例如果
数据框
是一些分布式上下文,例如spark,请始终记住代码可能会在另一台机器上执行。因此,永远不要使用var,请使用其他api代替标题的工作!非常感谢!!我从scala开始。这是个好消息:)为你高兴
   first group:A
   A|B
   A
   Grupos de lista 1
   grupo: A
scala> var grupo = "A"
grupo: String = A

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

scala> grupo
res6: String = MUTATE-2
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