所以,我想阅读并读为一个数组。为此,我可以使用收集方法。但是,这种方法确实很烦人,因为在我的情况下,它一直在给予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()