我用spark submit运行以下python脚本r = rdd.map(list).groupBy(lambda x: x[0]).map(lambda x: x[1]).map(list)
r_labeled = r.map(f_0).flatMap(f_1)
r_labeled.map(lambda x: x[3]).collect()
它得到了java.lang.OutOfMemoryError,特别是最后一行的collect()操作
^{pr2}$
消息显示OutOfMemoryError,但没有其他内容。是关于堆、垃圾收集还是什么的?我不知道。在
不管怎样,我试着把所有关于内存的东西配置成巨大的价值。在spark.driver.maxResultSize = 0 # no limit
spark.driver.memory = 150g
spark.executor.memory = 150g
spark.worker.memory = 150g
(并且服务器有157g的可用物理内存。)
同样的错误仍然存在。在
然后我把输入数据减少了一点,代码每次都能完美地通过。实际上,collect()获得的数据大约是1.8g,远远小于物理15g内存。在
现在,我确信错误不是关于代码和物理内存是没有限制的。这就像输入数据的大小有一个阈值,传递它将导致内存不足错误。在
那么我怎样才能提升这个thresold,这样我就可以在没有内存错误的情况下处理更大的输入数据呢?有什么设置吗?在
谢谢。在
==========随访========
根据this,这个错误与Java序列化程序和映射转换中的大对象有关。我确实在代码中使用了大对象。
想知道如何让Java序列化程序适应大对象。在