使用spark上的map函数更新变量

时间:2015-09-25 03:55:22

标签: scala apache-spark cluster-computing

这是我的代码:

Enter a String: does it work?
Your String is: does

此代码无法正常运行。我怎样才能使它成功运作?

1 个答案:

答案 0 :(得分:4)

好的,所以对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