Итак, у меня есть фрейм данных, в котором есть столбец file_date. Для данного прогона фрейм данных содержит данные только для одного уникального file_date. Например, в прогоне предположим, что имеется около 100 записей с file_date, равным 2020_01_21.
Я пишу эти данные, используя следующие
(df
.repartition(1)
.write
.format("delta")
.partitionBy("FILE_DATE")
.mode("overwrite")
.option("overwriteSchema", "true")
.option("replaceWhere","FILE_DATE=" + run_for_file_date)
.mode("overwrite")
.save("/mnt/starsdetails/starsGrantedDetails/"))
Мое требование - создавать папку / раздел для каждого FILE_DATE, так как есть большая вероятность, что данные для определенного file_date будут перезапущены, а данные конкретного file_date должны быть перезаписаны. К сожалению, в приведенном выше коде, если я не помещаю опцию «replaceWhere», он просто перезаписывает данные и для других разделов, но если я напишу вышеупомянутое, данные, похоже, правильно перезаписывают конкретный раздел, но каждый раз, когда запись выполняется, Я получаю следующую ошибку.
Обратите внимание, я также установил следующую конфигурацию искры перед записью:
spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")
Но я все еще получаю следующую ошибку:
AnalysisException: "Data written out does not match replaceWhere 'FILE_DATE=2020-01-19'.\nInvalid data would be written to partitions FILE_DATE=2020-01-20.;"
Не могли бы вы помочь, пожалуйста.