Spark / scala中的Foreach操作

时间:2016-05-06 06:51:03

标签: scala apache-spark

我正在尝试读取文件并连接字符串中的每一行,下面是代码:

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外部打印字符串变量时它是空的。 有什么理由吗?理想情况下,它应该使用填充值打印。

  1. 还有一个问题,如果我在上面的代码中使用.map而不是.foreach会是什么情况。当我在这种情况下尝试时,在.map代码中打印出空的字符串甚至println语句都没有填充。我的理解是地图也应该适用于这种情况吗?
  2. 提前致谢

1 个答案:

答案 0 :(得分:0)

我认为你是spark的新手,所以首先要了解spark概念,比如转换(map,flatmap,reduceby ....),action(collect,take ..),而不是实现代码。

您的方案无效,但您希望连接所有行,此代码将帮助您

val rddOfString = sc.textFile("file_path").map{
line => 
(1,line)//add unique key on each line
}.reduceByKey(_+_)//use reduce by for concatenation all lines
.map(_._2)//select your concat string
.collect//collect your data

您将获得String数组,其中第一个索引包含您的输出

val str=rddOfString(0)