Databricks parquet 写入作业导致空文件

问题描述 投票:0回答:1

我们有多个 Databricks PySpark 作业,将 parquet 文件写入 Azure Blob 存储中的同一容器中。最近,我们有时会得到一个内容为 0 字节的输出文件,即使源数据在那里并且在重新运行时它会被正确保存。

我们怀疑该进程首先将输出保存到 _$azuretmpfolder$ 文件夹(该文件夹是在容器的顶部结构中自动创建的),并且当两个作业尝试同时执行此操作时,它会损坏其中一个输出文件。 (https://medium.com/@minfuyang/the-write-process-of-spark-azure-blob-writer-90b1bd373449中提到了类似的内容,但没有官方文档。)

如果我们的怀疑是正确的,有没有办法配置临时文件夹(以便每个作业使用不同的文件夹)?或者有谁遇到过类似的问题并找到解决方案吗?

所用代码片段:

(
    spark_df.coalesce(1)
    .write.mode("overwrite")
    .option("header", "true")
    .format("parquet")
    .save(output_blob_folder)
)
azure-blob-storage azure-databricks parquet
1个回答
0
投票

我们通过分离 PySpark 作业解决了问题(以便它们不会并行运行)。从那时起,没有出现零字节的文件。这证实了我们对某些不需要的交互的怀疑,但我们仍然缺少解释(如果是由 _$azuretmpfolder$ 文件夹引起的)或正确的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.