Спарк: Авро против Паркет - PullRequest
0 голосов
/ 01 декабря 2018

Теперь, когда Spark 2.4 имеет встроенную поддержку формата Avro, я рассматриваю возможность изменения формата некоторых наборов данных в моем озере данных - тех, которые обычно запрашиваются / объединяются для целых строк, а не для конкретных агрегаций столбцов -от Parquet до Avro.

Однако большая часть работы над данными выполняется через Spark, и, насколько я понимаю, кэширование и вычисления Spark в памяти выполняются на столбчато-форматированных данных.Паркет предлагает повышение производительности в этом отношении, в то время как Avro понесет какой-то штраф за «преобразование» данных?Какие еще соображения мне следует знать в этом отношении?

1 Ответ

0 голосов
/ 01 декабря 2018

Оба формата светятся при разных ограничениях, но имеют сильные типы со схемами и общую двоичную кодировку.В своей основной форме он сводится к этой дифференциации:

  • Avro - построчный формат.Из этого следует, что вы можете добавлять построчно к существующему файлу.Эти построчные добавления также сразу видны всем читателям, работающим с этими файлами.Avro лучше всего подходит, когда у вас есть процесс, который записывает данные в ваше озеро данных потоковым (не пакетным) способом.
  • Parquet - это столбчатый формат, и его файлы не могут быть добавлены.Это означает, что для новых поступающих записей вы всегда должны создавать новые файлы.В обмен на такое поведение паркет приносит несколько преимуществ.Данные хранятся в столбчатой ​​форме, и к каждому столбцу применяется сжатие и кодирование (простое распознавание типов, низкое быстродействие, но высокоэффективное сжатие).Таким образом, файлы Parquet будут намного меньше файлов Avro.Также Паркет записывает основную статистику, согласно которой, когда вы загружаете данные из нее, вы можете перенести часть вашего выбора в I / O.Тогда только необходимый набор строк загружается с диска.Поскольку Parquet уже работает в столбчатом режиме, а большинство структур в памяти также будут столбцовыми, загрузка данных из них, как правило, происходит намного быстрее.

Поскольку ваши данные и процесс приема уже настроены нанапишите файлы Parquet. Вероятно, вам лучше остаться с Parquet, если прием данных (задержка) не станет для вас проблемой.

Типичное использование - это сочетание Parquet и Avro.Последние, недавно поступившие данные сохраняются в виде файлов Avro, поскольку это делает данные немедленно доступными для озера данных.Более исторические данные преобразуются, например, ежедневно в файлы Parquet, так как они меньше по размеру и наиболее эффективны для загрузки, но могут быть записаны только партиями.Работая с этими данными, вы загрузите оба в Spark как объединение двух таблиц.Таким образом, вы получаете преимущество эффективного чтения с помощью Parquet в сочетании с немедленной доступностью данных с Avro.Этот шаблон часто скрывают форматы таблиц, такие как Udi's Hudi или Apache Iceberg (инкубационный) , который был запущен Netflix.

...