所以,我有这个文件夹,我们称之为/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的数据(这是我的情况),则应使用不同的方法。