#apache-spark #pyspark #partitioning #overwrite
Вопрос:
Моя цель-создать ежедневный процесс, который будет перезаписывать все разделы по определенному пути в S3 новыми данными из фрейма данных.
Я делаю — df.write.format(source).mode("overwrite").save(path)
(Также попробовал опцию динамической перезаписи).
Однако в некоторых запусках старые данные не удаляются. Означает, что я вижу файлы со старой даты вместе с новыми файлами в одном разделе. Я подозреваю, что это как-то связано с запусками, которые прервались в середине из-за проблем с памятью и оставили некоторые поврежденные файлы, которые при следующем запуске не удалили, но пока не смогли воспроизвести.
Комментарии:
1. Если вы зададите запрос, увидите ли вы новые или новые старые данные?
2. Старое новое, так что получаем дубликаты
Ответ №1:
spark.conf.set(«spark.sql.sources.partitionOverwriteMode», «динамический») — опция сохранит существующий раздел и перезапишет один раздел. если вы хотите перезаписать все существующие разделы и сохранить текущий раздел, снимите настройки, указанные выше. ( я тестировал в версии spark 2.4.4)
Комментарии:
1. Тем не менее, если предыдущий запуск не удался в середине — перезапись не удаляет файлы в целевом объекте.