我有大约8米的数据行,大约有500列。
当我尝试将spark作为单个文件coalesce(1)
编写时,它会失败并显示OutOfMemoryException
。
我知道这是一个执行器上的大量数据,但据我所知,对于镶木地板的写入过程,它只保存内存中一个行组的数据,然后将其刷新到磁盘然后继续下一个之一。
我的执行程序有16GB的内存,不能再增加。数据包含很多字符串。
所以我感兴趣的是一些设置,我可以调整为宽桌子编写大型镶木地板文件的过程。
我知道我可以启用/禁用字典,增加/减少阻止和页面大小。
但是对我的需求来说什么是好的配置呢?
答案 0 :(得分:0)
我不认为Parquet真的有助于失败,调整配置可能不会有帮助。
coalesce(1)
是一项影响所有上游代码的激烈操作。因此,所有处理都在一个节点上完成,并且根据您自己的说法,您的资源已经非常有限。
您没有提供有关其余管道的任何信息,但如果您想继续使用Spark,那么您最好的希望是将coalesce
替换为repartition
。如果在前面的一个操作中发生OOM,它可能有帮助。