Лучший способ копирования раздела в HDFS - PullRequest
1 голос
/ 08 мая 2020

Итак, у меня есть вариант использования, когда я хочу скопировать последний раздел таблицы и вставить его в ту же таблицу с новым значением столбца раздела.

Важно отметить, что значение последнего раздела всегда известно.

Я могу придумать два способа сделать это

  1. Получить where partitionColumn = partitionValue в DataFrame и изменить значение раздела, используя .withColumn, а затем saveAsTable и затем выполните Invalidate / Refre sh
  2. OR,
    1. Скопируйте файлы parquet из каталога последнего раздела
    2. Создайте новый раздел, вставьте его в новый каталог с помощью /newPatritionValue/ в конце
    3. Вставить паркетные файлы
    4. Выполнить ALTER TABLE

Что будет работать быстрее?

1 Ответ

0 голосов
/ 08 мая 2020

Я думаю, что подход 1 будет иметь дополнительные накладные расходы. Spark может попытаться записать файлы по-разному (это может быть количество файлов или сжатие или даже некоторые модификации схемы), потому что с его точки зрения вы читаете один набор данных, а затем выводите другой.

С подходом 2 вы просто копируете файлы в другую папку, данные будут точно такими же после копирования. Также вы даже можете заменить ALTER TABLE .. ADD PARTITION .. LOCATION .. на MSCK REPAIR TABLE .., это сделает ваш код чище, поскольку передается меньше параметров.

Ваши (и ваша команда) предпочтения тоже имеют значение. Если все ваши рабочие процессы уже находятся в Spark, в долгосрочной перспективе будет больше вреда, если вы добавите какой-то другой тип заданий.

...