Я был бы осторожен с такими операциями, где преобразованный вход - новый выход Причина в том, что вы можете потерять свои данные в случае любой ошибки. Давайте представим, что ваша логика преобразования содержит ошибки и вы сгенерировали неверные данные. Но вы видели это только один день спустя. Более того, чтобы исправить ошибку, вы не можете использовать только что преобразованные данные. Вам нужны данные до преобразования. Что вы делаете, чтобы снова привести данные в соответствие?
Альтернативный подход будет:
- экспонирование вида
- в каждом пакете вы пишете новую таблицу, а в конце вы заменяете только представление этой новой таблицей
- через несколько дней вы также можете запланировать работу по уборке, которая удалит таблицы за последние X дней
Если вы хотите остаться со своим решением, почему бы просто не сделать это вместо того, чтобы иметь дело с контрольными точками?
df.write.parquet("hdfs:/directoryXYZ/PrePro_temp")\
.mode('overwrite')
df.load("hdfs:/directoryXYZ/PrePro_temp").write.format('parquet').mode('overwrite').saveAsTable('org_table')
Конечно, вы прочитаете данные дважды, но они выглядят менее хакерскими, чем с контрольной точкой. Более того, вы можете хранить свои «промежуточные» данные в разных каталогах каждый раз, и благодаря этому вы сможете решить проблему, которую я раскрыл в начале. Даже если у вас есть ошибка, вы все равно можете принести действительную версию данных, просто выбрав хороший каталог и выполнив .write.format(...)
для org_table.