Parquet在spark上写出OutOfMemoryException

时间:2018-05-17 08:05:43

标签: apache-spark apache-spark-sql parquet

我有大约8米的数据行,大约有500列。 当我尝试将spark作为单个文件coalesce(1)编写时,它会失败并显示OutOfMemoryException

我知道这是一个执行器上的大量数据,但据我所知,对于镶木地板的写入过程,它只保存内存中一个行组的数据,然后将其刷新到磁盘然后继续下一个之一。

我的执行程序有16GB的内存,不能再增加。数据包含很多字符串。

所以我感兴趣的是一些设置,我可以调整为宽桌子编写大型镶木地板文件的过程。

我知道我可以启用/禁用字典,增加/减少阻止和页面大小。

但是对我的需求来说什么是好的配置呢?

1 个答案:

答案 0 :(得分:0)

我不认为Parquet真的有助于失败,调整配置可能不会有帮助。

coalesce(1)是一项影响所有上游代码的激烈操作。因此,所有处理都在一个节点上完成,并且根据您自己的说法,您的资源已经非常有限。

您没有提供有关其余管道的任何信息,但如果您想继续使用Spark,那么您最好的希望是将coalesce替换为repartition。如果在前面的一个操作中发生OOM,它可能有帮助。