Java 有没有比collect更好的方法来读取spark中的RDD?

Java 有没有比collect更好的方法来读取spark中的RDD?,java,serialization,apache-spark,bigdata,Java,Serialization,Apache Spark,Bigdata,所以,我想将RDD和RDD读入一个数组。为此,我可以使用收集方法。但这种方法真的很烦人,因为在我的例子中,它不断地给出kyro缓冲区溢出错误。如果我设置了太多的kyro缓冲区大小,它就会开始有自己的问题。另一方面,我注意到,如果我只是使用saveAsTextFile方法将RDD保存到一个文件中,我不会得到任何错误。因此,我在想,一定有更好的方法将RDD读入数组,而不像collect方法那样有问题。否。collect是将RDD读入数组的唯一方法 saveAsTextFile不必将所有数据收集到一台

所以,我想将RDD和RDD读入一个数组。为此,我可以使用收集方法。但这种方法真的很烦人,因为在我的例子中,它不断地给出kyro缓冲区溢出错误。如果我设置了太多的kyro缓冲区大小,它就会开始有自己的问题。另一方面,我注意到,如果我只是使用saveAsTextFile方法将RDD保存到一个文件中,我不会得到任何错误。因此,我在想,一定有更好的方法将RDD读入数组,而不像collect方法那样有问题。

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


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

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

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

此方法返回一个迭代器,该迭代器包含此RDD中的所有元素。迭代器将消耗与此RDD中最大分区相同的内存。作为RunJob处理,以在每个步骤上计算一个分区

>>> x = rdd.toLocalIterator()
>>> x
<generator object toLocalIterator at 0x283cf00>

托洛卡文学家()

此方法返回一个迭代器,该迭代器包含此RDD中的所有元素。迭代器将消耗与此RDD中最大分区相同的内存。作为RunJob处理,以在每个步骤上计算一个分区

>>> x = rdd.toLocalIterator()
>>> x
<generator object toLocalIterator at 0x283cf00>

也许最好问一个关于缓冲区溢出错误的问题。我可以设置的Kyro序列化程序缓冲区的最大大小是1GB。那么,这是否意味着,我不能收集超过1GB的数据?也许可以切换到标准序列化?@maasg:那么如何切换到标准序列化?一个更相关的问题是A)为什么不能保存文件并将其读回?b) 为什么你真的希望在一个驱动程序中包含大于1G的数据?也许最好问一个关于缓冲区溢出错误的问题。我可以设置的Kyro序列化程序缓冲区的最大大小是1GB。那么,这是否意味着,我不能收集超过1GB的数据?也许可以切换到标准序列化?@maasg:那么如何切换到标准序列化?一个更相关的问题是A)为什么不能保存文件并将其读回?b) 为什么您真的希望在一个驱动程序中包含>1G的数据?但是为什么这个collect方法总是抛出这些缓冲区溢出错误。此外,我无法将Kyro序列化程序的最大大小设置为1GB以上。所以,似乎不可能收集任何大于1GB的数据?你知道怎么解决这个问题吗?我不知道你看到了什么错误。也不知道为什么不能将设置(哪个设置?)增加到1GB以上。(您是否也增加了
spark.driver.maxResultSize
?)无论如何,您还可以尝试使用
RDD.toLocalitator
而不是
collect
。只是在黑暗中拍摄。每个分区也有2GB的限制,您可能接近达到。()在这种情况下,更多的分区是解决方案。但是为什么这个collect方法总是抛出这些缓冲区溢出错误呢。此外,我无法将Kyro序列化程序的最大大小设置为1GB以上。所以,似乎不可能收集任何大于1GB的数据?你知道怎么解决这个问题吗?我不知道你看到了什么错误。也不知道为什么不能将设置(哪个设置?)增加到1GB以上。(您是否也增加了
spark.driver.maxResultSize
?)无论如何,您还可以尝试使用
RDD.toLocalitator
而不是
collect
。只是在黑暗中拍摄。每个分区也有2GB的限制,您可能接近达到。()在这种情况下,多分区是解决方案。