有没有比收集更好的方法来读取火花中的RDD?

时间:2015-05-19 18:49:26

标签: java serialization apache-spark bigdata

所以,我想读取和RDD到一个数组。为此,我可以使用收集方法。但是这种方法真的很烦人,因为在我的情况下它继续给出kyro缓冲区溢出错误。如果我将kyro缓冲区大小设置得太多,它就会开始出现问题。另一方面,我注意到如果我只是使用 saveAsTextFile 方法将RDD保存到文件中,我就没有错误。所以,我在想,必须有一些更好的方法将RDD读入数组,这与收集方法一样没有问题。

2 个答案:

答案 0 :(得分:4)

没有。 collect是将RDD读入数组的唯一方法。

saveAsTextFile永远不必将所有数据收集到一台计算机上,因此它不受{1}}上同一台计算机上可用内存的限制。

答案 1 :(得分:1)

toLocalIterator()

此方法返回包含此RDD中所有元素的迭代器。迭代器将消耗与此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()