【发布时间】:2016-05-06 20:43:12
【问题描述】:
我正在尝试读取文件并将每一行连接到一个字符串中,下面是代码:
var str:string
val RDD1 = sc.textFile("file_path").foreach{line =>
str += line
Println (str) // prints string one by one after concatenation
}
Println(str) // empty string
输入文件中的所有行都连接在字符串中,我在 foreach 本身中使用 Println 语句检查了该字符串。 但是当我在 foreach 之外打印字符串变量时,它是空的。 有什么理由吗?理想情况下,它应该与填充的值一起打印。
- 还有一个问题,如果我在上面的代码中使用 .map 而不是 .foreach 会怎样。当我在这种情况下尝试时,字符串中没有填充任何内容,即使 .map 代码中的 println 语句也打印为空。我的理解是地图也应该在这种情况下工作?
提前致谢
【问题讨论】:
-
这个问题设计得很糟糕。您提供的代码不会按原样编译。请尝试花一些时间自己进行一些调查,并至少尝试使其运行。否则问题可能会被关闭或忽略。
-
每个工作人员都有一个单独的 var
str副本,并且不会发回。请参阅此问题stackoverflow.com/a/29418504/21755。真的,这应该是显而易见的——Spark 的全部意义在于将工作分配给多个工作人员,并且像这样共享一些可变的全局变量会扼杀任何效率提升。
标签: scala apache-spark