写入 hdfs 时,如何仅覆盖必要的文件夹



所以,我有这个文件夹,我们称之为/data

它里面有分区,例如: /data/partition1/data/partition2 .

我从 kafka 读取新数据,并想象我只需要更新/data/partition2.我愿意:

dataFrame
    .write
    .mode(SaveMode.Overwrite)
    .partitionBy("date", "key")
    .option("header", "true")
    .format(format)
    .save("/data")

它成功地更新了/data/partition2,但/data/partition1消失了......如何强制 Spark 的SaveMode.Overwrite不接触不需要更新的 HDFS 分区?

您正在使用删除以前存在的目录的SaveMode.Overwrite。 您应该改用SaveMode.Append

注意:追加操作并非没有成本。 使用追加模式调用 save 时,Spark 需要确保文件名的唯一性,以便它不会意外覆盖现有文件。 目录中已有的文件越多,保存操作所需的时间就越长。 如果您谈论的是少量文件,那么这是一个非常具有成本效益的操作。 但是,如果您在原始目录中的数千个文件中具有数TB的数据(这是我的情况),则应使用不同的方法。

相关内容

  • 没有找到相关文章

最新更新