Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spark/scala中的Foreach操作_Scala_Apache Spark - Fatal编程技术网

Spark/scala中的Foreach操作

Spark/scala中的Foreach操作,scala,apache-spark,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 输入文件中的所有行都连接

我正在尝试读取一个文件并将每一行串联成一个字符串,下面是代码:

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语句也打印为空。我的理解是map在这种情况下也应该工作吗

  • 提前感谢

    我认为您是spark的新手,所以首先要了解转换(map、flatmap、reduceby…)和操作(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
    
    您将获得字符串数组,其中第一个索引包含您的输出

    val str=rddOfString(0)
    

    这个问题设计得很糟糕。您提供的代码不会按原样编译。请试着花点时间自己做一些调查,至少试着让它运行起来。否则问题可能会被关闭或忽略。每个工人都有一份单独的var
    str
    ,并且不会发回。看这个问题。事实上,这应该是显而易见的-Spark的全部目的是在多个工作人员之间分配工作,而共享一些可变的全局变量(如这样)会扼杀任何效率提升。不要使用字符串
    (+)
    。@Gabber:谢谢你的代码,对我来说它是有效的,但使用str=rddOfString.first()而不是rddOfString(0)。是的,我是spark的新手,但我对foreach和map之类的转换有基本的了解,这个问题的原因是foreach也应该起作用,因为foreach对本例中的每一行参数都起作用。@yuvrajrajpurohit你读过我的评论了吗?它不起作用,因为您不能像这样在工作人员之间共享可变值。@zero可能会问您,为什么?@Yuvrajpurohit rddOfString是字符串数组,您可以首先使用您的输出以及rdd(0)获取,但是如果答案是可接受的,请接受它