Scala 为循环中的var分配新值
无法访问循环中的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 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