В чем выгода сжать ORC или паркет - PullRequest
0 голосов
/ 12 февраля 2019

Файлы ORC и Parquet сами по себе (без других параметров сжатия, например, snappy) имеют эффекты сжатия (те же данные, загруженные в файл паркета, будут намного меньше, чем текстовый файл), поэтому я спрашиваю, нужно ли мне указывать параметры сжатиянапример, snappy для дальнейшего сжатия файла ORC и паркета, поскольку эти файлы хранятся в двоичном виде, и, возможно, эффект сжатия не так велик по сравнению с двоичными данными.

Обновление:

Я пробовал с текстовым файлом 306M, затем

текст: 306M

паркет: 323M

паркет + snappy: 50M

Из результатов тестированияПохоже, что сам паркет не имеет сжатия, он даже больше, чем текст (пока не знаю причину), а эффект сжатия parquet + snappy очень высок.

1 Ответ

0 голосов
/ 12 февраля 2019

Эффективность сжатия Parquet и ORC сильно зависит от ваших данных.Без сжатия Паркет по-прежнему использует кодировки для сжатия данных.Кодировки используют более простой подход, чем сжатие, и часто дают результаты, аналогичные универсальному сжатию для однородных данных.Наиболее часто используемое кодирование для Parquet - это словарное кодирование.Мы храним каждое уникальное значение строки в словаре и сохраняем индекс этого значения в словаре.Когда данные в столбце содержат неуникальные записи, это удаляет дублирование значений.Но это также добавляет накладные расходы, которые мы храним дополнительное целое число на строку.Хотя Parquet использует наименьший возможный целочисленный тип, если у вас есть только уникальные значения в столбце, общая память для этого столбца будет больше, чем без «индексов».В этом случае вам следует просто использовать словарную кодировку.

В случае, когда в вашем столбце много повторяющихся значений, мы обычно получаем более высокий выход за счет словаря-кодирования-затем-сжатия.Рассмотрим строковый столбец с 2 уникальными значениями по 16 байт, но по 1024 строкам.В случае передачи значений в виде компрессора, мы бы сжали сразу 16 КБ.

При кодировании словаря у нас был бы словарь из 32 байтов и 1024 int1 (бит) значений.Таким образом, мы уже сократили бы размер данных со сжатием словаря до 160 байт.Сжатие данных на величину, меньшую, всегда быстрее, независимо от энтропии.

Для большинства данных реального мира эффективность кодирования + сжатия обычно находится где-то между двумя перечисленными случаями.

...