是否有比收集在Spark中读取RDD更好的方法了



所以,我想阅读并读为一个数组。为此,我可以使用收集方法。但是,这种方法确实很烦人,因为在我的情况下,它一直在给予Kyro缓冲区溢出错误。如果我将Kyro缓冲区大小设置得太多,它就会开始有自己的问题。另一方面,我注意到,如果我只使用 saveastextfile 方法将RDD保存到文件中,则没有任何错误。因此,我在想,必须有一些更好的方法将RDD读取到一个数组中,这不如 collect 方法。

no。collect是将RDD读取到数组的唯一方法。

saveAsTextFile永远不必将所有数据收集到一台计算机上,因此它不受单个计算机上的可用内存的限制,就像 collect一样。

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/java/org/apache/spark/spark/rdd/rdd.html#tolocaliterator()

最新更新