我正在尝试将rdd转换为二维数组。我正在使用下面的代码 -
import scala.collection.mutable.ArrayBuffer
var temp=new ArrayBuffer[ArrayBuffer[_>:Double]]
f.foreach(x=> {
temp:+= ArrayBuffer(x(0),x(1),x(2),x(3),x(4))
println(temp)
})
println(temp)
这里是我的rdd。内部循环中的println语句正常工作。但是当外部println执行时,它不会显示任何内容。有人可以解释为什么会这样吗?提前谢谢。
答案 0 :(得分:2)
由于您尚未提供f
实施,我猜它为RDD[Array]
。
RDD
本质上是分布式的。当我们在map
上应用foreach
,reduce
,RDD
等函数时,它们会以分布式方式执行,即由于RDD
已经分发了foreach
函数也以executor
节点上的分布式方式执行。由于temp
指向ArrayBuffer
节点上创建的driver
,因此分发执行无法更新ArrayBuffer
指向的temp
。< / p>
在将collect
函数应用为
f
foreach
import scala.collection.mutable.ArrayBuffer
var temp=new ArrayBuffer[ArrayBuffer[_>:Double]]
f.collect.foreach(x=> {
temp += ArrayBuffer(x(0),x(1),x(2),x(3),x(4))
println(temp)
})
println(temp)
你应该得到预期的输出。