我在纱线集群中有大RDD(1gb).在使用此群集的本地计算机上,我只有512 MB.我想在本地机器上迭代RDD中的值.我不能使用collect(),因为它会在本地创建太大的数组,这比我的堆更多.我需要一些迭代的方式.有方法iterator(),但它需要一些额外的信息,我无法提供.
UDP:提交给LocalIterator方法
我用spark shell编写了这个程序
val array = sc.parallelize(List(1, 2, 3, 4))
array.foreach(x => println(x))
Run Code Online (Sandbox Code Playgroud)
这打印一些调试语句,但不打印实际数字.
下面的代码工作正常
for(num <- array.take(4)) {
println(num)
}
Run Code Online (Sandbox Code Playgroud)
我确实理解这take是一个动作,因此会引发火花触发懒惰的计算.
但是foreach应该以同样的方式工作......为什么没有foreach从spark中带回任何东西并开始进行实际处理(退出懒惰模式)
我怎样才能在rdd上工作?
apache-spark ×2