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
Scala 使用spark上的映射函数更新变量_Scala_Apache Spark_Cluster Computing - Fatal编程技术网

Scala 使用spark上的映射函数更新变量

Scala 使用spark上的映射函数更新变量,scala,apache-spark,cluster-computing,Scala,Apache Spark,Cluster Computing,这是我的密码: val dataRDD = sc.textFile(args(0)).map(line => line.split(" ")).map(x => Array(x(0).toInt, x(1).toInt, x(2).toInt)) var arr = new Array[Int](3) printArr(arr) dataRDD.map(x => {arr=x}) printArr(arr) 此代码工作不正常。如何才能使其成功工作?好的,因此RDD上的操作由不

这是我的密码:

val dataRDD = sc.textFile(args(0)).map(line => line.split(" ")).map(x => Array(x(0).toInt, x(1).toInt, x(2).toInt))
var arr = new Array[Int](3)
printArr(arr)
dataRDD.map(x => {arr=x})
printArr(arr)

此代码工作不正常。如何才能使其成功工作?

好的,因此RDD上的操作由不同的工作人员并行执行(通常在集群中的不同机器上),因此您不能传入要更新的这种类型的“全局”对象
arr
。你看,每个工人都会收到自己的
arr
副本,他们会更新该副本,但司机永远不会知道

我猜您在这里要做的是从RDD收集所有数组,这可以通过一个简单的
collect
操作来完成:

val dataRDD = sc.textFile(args(0)).map(line => line.split(" ")).map(x => Array(x(0).toInt, x(1).toInt, x(2).toInt))
val arr = dataRDD.collect()

其中
arr
具有类型
Array[Array[Int]]
。然后,您可以使用常规数组操作运行
arr

请解释它应该如何工作,以及它是如何不工作的。您是否收到任何错误?RDD是不可变的!您需要使用应用的转换创建一个新的数组。非常感谢。然后,首先,我初始化数组arr(根据定义),然后,我计算新数组arr(dataRDD),因此,我要分配新的arr(dataRDD)对于旧的arr。这是关于在spark上更新变量的问题。你能帮我吗?@Glennie Helles SindholtI不知道为什么要初始化
arr
,但是如果出于某种原因需要,你可以添加
var arr=Array(新数组[Int](3))
,然后将上面的行更改为
arr=dataRDD.collect()
。请注意,只有RDD上的操作是并行进行的。您可以在
arr
(它只是一个普通数组)上执行的任何操作都在驱动程序上处理(而不是并行处理)