我目前在对镶木地板数据运行约100个聚合时收集结果时遇到一些问题。
我目前所做的是为每个stat运行聚合,然后将结果join
加载到结果DataFrame上。因此,在我所有计算结束时,这个结果DataFrame将在一行中有大约100个条目。
我现在的问题是,我在本地运行Spark,当我运行Spark操作以获得结果(collect()
或head()
(时,我会收到OOM错误。我读过很多关于不在驱动程序上收集的文章,但在这种情况下,生成的DataFrame非常小,我在可能只有1gb大小或更小的文件上运行,驱动程序内存为16gb。有没有其他方法可以让我得到这些结果?
我也尝试过批处理统计数据,但它似乎对这个问题没有太大帮助。
感谢您的帮助!
编辑:文件在Parquet 中压缩时为100MB
你是对的,你不应该使用collect((,你看到的1GB数据一旦进入内存,就会占用更大的内存,因为数据会被反序列化。
您可以尝试:-
- 打印数据,而不是收集数据
- 增加驾驶员记忆
- 将其写入磁盘