所以,我想读和RDD到一个数组。 为了这个目的,我可以使用收集方法。 但该方法是在我的情况下,它不断给屈勒缓冲区溢出错误真的很烦。 如果我设置KYRO缓冲区大小太大,它开始有自己的问题。 在另一方面,我注意到,如果我只是保存到RDD使用saveAsTextFile方法的文件,我没有得到任何错误。 所以,我在想,必须有读取RDD到一个数组这是不一样的收集方法问题的一些更好的方法。
Answer 1:
号collect
是用于读出一个RDD到一个数组的唯一方法。
saveAsTextFile
从来没有将所有数据收集到一台机器,所以它不是由在以同样的方式在一台机器上的可用内存的限制collect
的。
Answer 2:
toLocalIterator()
该方法返回一个包含所有在这个RDD.The迭代器的元素会消耗尽可能多的内存在这种RDD最大分区的迭代器。 流程作为RunJob来评估在每个步骤一个单个分区。
>>> x = rdd.toLocalIterator()
>>> x
<generator object toLocalIterator at 0x283cf00>
那么你可以通过访问元素RDD
empty_array = []
for each_element in x:
empty_array.append(each_element)
https://spark.apache.org/docs/1.0.2/api/java/org/apache/spark/rdd/RDD.html#toLocalIterator()
文章来源: Is there any better method than collect to read an RDD in spark?