有没有更好的方法比收集读取火花的RDD?(Is there any better method th

2019-10-23 03:40发布

所以,我想读和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?