Как паркет определяет, какую кодировку использовать? - PullRequest
2 голосов
/ 23 апреля 2020

Контекст:

  • У меня есть два идентичных набора данных (скажем, левый и правый) со 112 файлами паркета в каждом наборе данных.
  • Эти файлы паркета были созданы с использованием Hive, путем преобразования плоских файлов с разделителями.
  • Процесс, используемый для создания файлов плоских файлов с разделителями, немного отличается для левого и правого процессов.
  • Я заметил существенную разницу в размере между обоими наборами данных, даже если содержимое в них точно одни и те же. Левый набор данных составляет 400 ГБ, а правый набор данных - 420 ГБ.
  • Когда я проверил схему Parquet с помощью инструментов паркет, я заметил, что для левого и правого наборов данных использовалась различная кодировка, как показано (для одного столбца) ниже:

Слева:

column_a:  INT64 SNAPPY DO:0 FPO:4 SZ:5179987/6161135/1.19 VC:770100 ENC:PLAIN,RLE,BIT_PACKED

Справа:

column_a:  INT64 SNAPPY DO:0 FPO:4 SZ:3040269/5671813/1.87 VC:782499 ENC:BIT_PACKED,PLAIN,RLE,PLAIN_DICTIONARY

Мой вопрос:

Как паркет определяет, какой тип кодировки использовать и что могло заставить паркет выбирать другую кодировку? Это то, что мы можем контролировать с помощью конфигурации Hive / Spark?

1 Ответ

0 голосов
/ 30 апреля 2020

Я думаю, что сообщение списка рассылки здесь с ответом здесь имеет лучший ответ, который я знаю. Короче говоря, вы не можете напрямую контролировать кодировку, которую использует Parquet для любого данного столбца. Есть некоторые вещи, которые могут помочь немного улучшить его, например, указание, что вы будете sh писать файл Parquet Version 2, а не файл Parquet Version 1, но это не точный контроль. Может быть что-то и можно сделать, но это, вероятно, потребует углубления во внутреннюю часть реализации Parquet.

...