val df3 = df.flatMap( r => {r.toString().split(",").filter(line=>line.contains(PREFIX)) })
// df3.show(100,false)
import scala.collection.mutable.ListBuffer
val df4= df3.map(line =>(line.split(" TO ")(1).trim)->line.split(" TO ")(0).trim)
val lss = new ListBuffer[String]()
df4.foreach {
row => {println(row._1); lss += (row._1) }
}
print(lss.size) // this code produce the size of list is zero.
}
输出:
1
2
3
4
5
6
7
8
9
0 //size of list
更新了类型
df3.map(line => (line.split(" TO ")(1).trim) -> line.split(" TO ")(0).trim).collect().toMap
技巧正在使用collect().toMap()
答案 0 :(得分:0)
foreach
是一个动作,将在执行程序上执行,而lss
是驱动程序上的值。因此,lss
不受影响。
要修改lss
,可以通过collect()或toLocalIterator()将数据移至驱动程序,然后追加。