所以,我有这个文件夹,我们称之为/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分区?>
答案 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的数据(我就是这种情况),则应使用其他方法。