为什么不能将元素追加到列表中

时间:2019-03-20 09:24:52

标签: scala apache-spark

 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

更新了类型

enter image description here

我已经解决了这个问题,谢谢大家的把戏。

df3.map(line => (line.split(" TO ")(1).trim) -> line.split(" TO ")(0).trim).collect().toMap

技巧正在使用collect().toMap()

1 个答案:

答案 0 :(得分:0)

foreach是一个动作,将在执行程序上执行,而lss是驱动程序上的值。因此,lss不受影响。

要修改lss,可以通过collect()toLocalIterator()将数据移至驱动程序,然后追加。