На самом деле приведенный выше код создает / заменяет любую папку (раздел) по указанному ниже пути
/data/input/STATS/my_date=2018-01-03/
Итак, если вы измените данные, будет вставлена новая подпапка
/data/input/STATS/my_date=2018-01-03/my_date=2018-01-02
/data/input/STATS/my_date=2018-01-03/my_date=2018-01-03
, есливам нужно заменить новый раздел, это обычная проблема, которую можно решить, используя следующую строку
df.write.mode(SaveMode.Overwrite).save("/root/path/to/data/partition_col=value")
, затем вы можете написать некоторый код, чтобы получить отдельный раздел из вашего кода, а затем использовать df.foreachPartition{partition=> some code }
ипередать раздел в команду сохранения
Обновление: мы можем выбрать отдельный раздел и отфильтровать кадр данных и записать каждый отдельно
val uniquePartitionNames = df.select($"colname").distinct().collect()
for (partition <- uniquePartitionNames ) {
val filteredDFBaseOnPartition = df.where($"colname" === partition)
filteredDFBaseOnPartition .write.mode("Overwrite").save("path/colname="+partition)
}