Spark覆盖不会删除目标路径中的文件

Posted

技术标签:

【中文标题】Spark覆盖不会删除目标路径中的文件【英文标题】:Spark overwrite does not delete files in target path 【发布时间】:2022-01-04 20:40:31 【问题描述】:

我的目标是构建一个日常流程,该流程将使用数据帧中的新数据覆盖 S3 中特定路径下的所有分区。

我愿意—— df.write.format(source).mode("overwrite").save(path) (还尝试了动态覆盖选项)。

但是,在某些运行中,旧数据不会被删除。意味着我可以看到旧日期的文件以及同一分区下的新文件。 我怀疑这与由于内存问题导致运行中途中断并留下一些损坏的文件有关,下一次运行没有删除但无法重现它。

【问题讨论】:

如果查询,看到的是新数据还是新+旧数据? 旧+新,所以会重复 【参考方案1】:

spark.conf.set("spark.sql.sources.partitionOverwriteMode", "dynamic") - 选项将保留您现有的分区并覆盖单个分区。如果要覆盖所有现有分区并保留当前分区,请取消设置上述配置。 (我在 spark 版本 2.4.4 中测试过)

【讨论】:

仍然,如果之前的运行在中间失败 - 覆盖不会删除目标中的文件。

以上是关于Spark覆盖不会删除目标路径中的文件的主要内容,如果未能解决你的问题,请参考以下文章

spark中覆盖的行为

为啥ios中的沙盒路径找不到文件

Spark流式传输作业不会删除随机播放文件

当源表的一行中的多个列与目标表中单行的相同列匹配时,从目标 spark delta 表中删除一行

拷贝和删除文件

asp.net 文件复制或删除用相对路径,File.Copy中用相对路径,巧用相对路径复制文件