【问题标题】:Pyspark only writing '_temporary' folder when writing parquetPyspark 在写 parquet 时只写 '_temporary' 文件夹
【发布时间】:2022-01-12 17:20:18
【问题描述】:

我正在尝试将 pyspark df 写成这样的镶木地板:

df.write.format("parquet").\
mode('overwrite').\
save('gs://my_bucket/my_folder/filename')

这个数据框有数百万行,但我之前已经能够在几分钟内编写一个类似的数据框。但是,这需要30+分钟,我只能看到它下面的_temporary/0/,没有别的。

我能够轻松地编写一个小数据框并查看它是否有效,但由于某种原因,这个没有。数据框似乎没有任何问题。

除了数据框的问题之外,是否还有其他原因导致它一直持续并且没有写入任何内容?其他类似大小的数据框没有问题。

【问题讨论】:

    标签: python pyspark google-cloud-storage parquet


    【解决方案1】:
    • 在 spark 作业完成之前,您的文件不会出现
    • 您的工作成功完成后,您将看到文件
    • 这里解释了Spark _temporary creation reason
    • 您可能会看到在 _temporary 目录中创建的最终文件,然后再将它们移动到最终目的地
    • 但是,请记住,Spark 必须先完成一个阶段中的所有任务,然后才能进入下一个阶段。如果您的一项任务在写入阶段之前卡在某个阶段,则您的作业可能看起来已冻结,您将看不到任何正在写入的文件。
    • 最好的调试方法是使用 spark UI。它将为您在各个阶段的所有任务的进度提供漂亮的视觉效果
    • 任务卡住的最常见原因是分区倾斜 - 其中一项任务比其他任务做的工作多得多,因此需要更长的时间才能完成。但是还有其他原因可能会导致您的工作冻结。同样,Spark UI 确实是最好/唯一的方式来很好地了解您的工作进展情况
    • 无论如何,Spark UI 总是有助于了解瓶颈或停滞的作业

    【讨论】:

    • 问题出在其他数据帧上,我看到了临时文件夹,但我看到在它下面添加了镶木地板部分。对于这个,只有临时文件夹,没有别的。我写过类似大小的dfs,但这似乎根本没有做任何事情。并且没有错误消息。
    • 除非你有一些错误日志,否则很难说是什么问题。最好的办法是查看 spark UI,看看是否可以看到瓶颈在哪里。您的数据可能存在大量偏差,其中一项任务未完成
    • 如果你的工作被困在一个特定的任务上——比如一个非常大的分区。然后,很可能在该任务完成之前不会写入任何数据。 spark UI 是调试此问题的最佳方式,因为它会为您提供有关您的任务如何进行的实时信息。您可以获得方便的视觉效果,以查看是否有一些分区需要很长时间才能完成
    • 了解瓶颈和错误日志的位置很重要,这有助于了解导致问题的原因。根据@Arran Duff 的建议,使用 spark UI 查看是否有任何数据集群导致问题并尝试监控处理数据所需的时间,某些数据可能需要比预期更长的时间或无法处理。
    • 已经用这些额外的 cmets 更新了答案
    猜你喜欢
    • 1970-01-01
    • 2020-04-03
    • 2022-01-04
    • 2022-01-16
    • 2022-01-20
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    相关资源
    最近更新 更多