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

时间:2019-01-17 17:20:35

标签: apache-spark apache-spark-sql

所以,我有这个文件夹,我们称之为/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分区?

1 个答案:

答案 0 :(得分:0)

您正在使用0 A 0.065447 1 B 0.301049 2 B -1.311432 3 A -0.209745 4 A -0.093495 dtype: float64 删除先前存在的目录。您应该改用SaveMode.Overwrite

注意:附加操作并非没有代价。当您使用追加模式调用保存时,spark需要确保文件名的唯一性,以使其不会意外覆盖现有文件。目录中已有的文件越多,保存操作所需的时间就越长。如果您谈论的是少数文件,那么这是非常节省成本的操作。但是,如果原始目录中成千上万个文件中有数TB的数据(我就是这种情况),则应使用其他方法。