【问题标题】:PySpark Unable to Spill on DataFrame WritePySpark 无法在 DataFrame 写入时溢出
【发布时间】:2020-02-22 20:36:30
【问题描述】:

我正在使用内置 Hadoop 的 PySpark 2.4.4 处理一个大型数据集。数据集被拆分为多个压缩的 CSV 文件,我正在尝试使用 PySpark 的 DataFrames 报告各种列的聚合计数。 PySpark 处理一切都很漂亮,直到我要求它使用

将 DataFrame 写入磁盘
df.write.csv("out.csv")

这导致以下警告淹没终端

WARN RowBasedKeyValueBatch: Calling spill() on RowBasedKeyValueBatch. Will not spill but return 0.

我尝试使用spark.executor.memory 属性增加执行程序的内存大小;但是,错误仍然存​​在。我不知道是否可以忽略此警告,或者我是否需要在信任报告结果之前进行更改。

here 有两个类似问题的答案,但我对它们的深度不满意。 Fredz0r 的答案只是引用了another answer,解释了溢出和随机播放之间的区别,但似乎没有解决消息的...Will not spill... 部分。其余答案的措辞好像这是一个严重的警告,但没有给出如何解决它的建议。

【问题讨论】:

    标签: python apache-spark pyspark pyspark-dataframes


    【解决方案1】:

    我真的认为您指出的答案已经涵盖了几乎所有内容。

    如果你提到你正在做一些分组,我能想到的一些额外提示是:

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

    • 如果您正在写入驱动程序本地磁盘而不是某些分布式文件系统(例如 HDFS),您将收集所有结果到驱动程序,因此您需要提高驱动程序内存而不是执行程序记忆。

    【讨论】:

    • 答案描述了溢出是什么,但没有解释如何使警告消失。我没有分布式文件系统,但找不到 spark 属性来增加驱动程序内存。我为此设置什么属性?
    • 你可以使用spark.driver.memory
    猜你喜欢
    • 2022-01-16
    • 2020-05-20
    • 1970-01-01
    • 2019-09-02
    • 2019-01-16
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多