Python PySpark无法在数据帧写入时溢出

Python PySpark无法在数据帧写入时溢出,python,apache-spark,pyspark,pyspark-dataframes,Python,Apache Spark,Pyspark,Pyspark Dataframes,我正在使用Hadoop内置的PySpark 2.4.4处理一个大型ish数据集。数据集被分割成多个压缩的CSV文件,我试图使用PySpark的DataFrames报告各种列的聚合计数。PySpark处理一切都非常出色,直到我要求它使用 df.write.csv(“out.csv”) 这将导致以下警告淹没终端 WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but retur

我正在使用Hadoop内置的PySpark 2.4.4处理一个大型ish数据集。数据集被分割成多个压缩的CSV文件,我试图使用PySpark的DataFrames报告各种列的聚合计数。PySpark处理一切都非常出色,直到我要求它使用

df.write.csv(“out.csv”)
这将导致以下警告淹没终端

WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.
我尝试使用
spark.executor.memory
属性增加执行器的内存大小;然而,错误依然存在。我不知道是否可以忽略此警告,或者在信任报告结果之前是否需要更改某些内容


对于一个类似的问题,有两个答案,但我不满意它们的深度。Fredz0r的回答只是引用了解释溢出和随机播放之间的区别,但似乎没有解决消息的
…Will not spill…
部分。剩下的答案的措辞似乎是一个严重的警告,但没有给出解决问题的建议。

我真的认为你所指的答案已经涵盖了几乎所有问题

我可以想到一些额外的提示,让你提到你正在做一些分组:

  • 可能您有一些数据倾斜,导致一个(或一些)分区非常大,因此持有这些分区的执行者需要比您已经分配的内存更多的内存

  • 如果您正在写入驱动程序本地磁盘,而不是某个分布式文件系统(例如HDFS),那么您将向驱动程序收集所有结果,因此需要提升驱动程序内存,而不是执行器内存


答案描述了什么是泄漏,但没有解释如何消除警告。我没有分布式文件系统,但我找不到spark属性来增加驱动程序内存。我应该为此设置什么属性?您可以使用
spark.driver.memory