Создание таблицы в spark занимает много времени

#pyspark #databricks #delta-lake

Вопрос:

У нас есть скрипт databricks для создания таблиц, подобный этому,

 finalDF.write.format('delta').option("mergeSchema", "true").mode('overwrite').save(table_path)
          spark.sql("CREATE TABLE IF NOT EXISTS {}.{} USING DELTA LOCATION '{}' ".format('GOLDDB', table, table_path))
 

Таким образом, в table_path изначально при первой загрузке у нас есть только 1 файл.. Таким образом, это выполняется по мере накопления дополнительных и повседневных файлов.. Таким образом, после 10 дополнительных нагрузок это займет около 10 часов. Не могли бы вы, пожалуйста, помочь мне в том, как оптимизировать нагрузку? Можно ли объединить файлы?

Я просто попытался удалить некоторые файлы для целей тестирования, но это не удалось с ошибкой, что некоторые файлы, присутствующие в файле журнала, отсутствуют, и это происходит, когда вы вручную удаляете файлы..

пожалуйста, подскажите, как оптимизировать этот запрос

Ответ №1:

Вместо write create table вы можете просто сделать все за один шаг, используя path опцию saveAsTable :

 finalDF.write.format('delta')
  .option("mergeSchema", "true")
  .option("path", table_path)
  .mode('overwrite')
  .saveAsTable(table_name) # like 'GOLDDB.name'
 

Для очистки старых данных вам необходимо использовать VACUUM команду (doc), возможно, вам потребуется уменьшить время хранения с 30 дней по умолчанию (см. delta.logRetentionDuration параметр doc on).

Комментарии:

1. Большое спасибо за предложение.. Вакуум мы выступаем в субботу вечером. Я попробую эту команду один раз и обновлю, если она работает

2. Попробовал вышеприведенное решение, но оно снова заняло много времени.

3. Вам нужно изучить планы выполнения и т. Д.