从Pyspark收集小结果集时OOM



我目前在对镶木地板数据运行约100个聚合时收集结果时遇到一些问题。

我目前所做的是为每个stat运行聚合,然后将结果join加载到结果DataFrame上。因此,在我所有计算结束时,这个结果DataFrame将在一行中有大约100个条目。

我现在的问题是,我在本地运行Spark,当我运行Spark操作以获得结果(collect()head()(时,我会收到OOM错误。我读过很多关于不在驱动程序上收集的文章,但在这种情况下,生成的DataFrame非常小,我在可能只有1gb大小或更小的文件上运行,驱动程序内存为16gb。有没有其他方法可以让我得到这些结果?

我也尝试过批处理统计数据,但它似乎对这个问题没有太大帮助。

感谢您的帮助!

编辑:文件在Parquet 中压缩时为100MB

你是对的,你不应该使用collect((,你看到的1GB数据一旦进入内存,就会占用更大的内存,因为数据会被反序列化。

您可以尝试:-

  1. 打印数据,而不是收集数据
  2. 增加驾驶员记忆
  3. 将其写入磁盘

最新更新