Apache Parquet — это бесплатный столбцово-ориентированный формат хранения данных с открытым исходным кодом в экосистеме Apache Hadoop . Он похож на RCFile и ORC , другие форматы файлов столбчатого хранения в Hadoop , и совместим с большинством платформ обработки данных вокруг Hadoop . Он обеспечивает эффективные схемы сжатия и кодирования данных с повышенной производительностью для обработки больших объемов сложных данных.
Проект с открытым исходным кодом по созданию Apache Parquet начался как совместная работа Twitter [3] и Cloudera . [4] Parquet был разработан как усовершенствование столбчатого формата хранения Trevni, созданного Дугом Каттингом , создателем Hadoop. Первая версия, Apache Parquet 1.0, была выпущена в июле 2013 года. С 27 апреля 2015 года Apache Parquet является проектом верхнего уровня, спонсируемым Apache Software Foundation (ASF). [5] [6]
Apache Parquet реализован с использованием алгоритма уничтожения и сборки записей [7] , который поддерживает сложные структуры данных , которые можно использовать для хранения данных. [8] Значения в каждом столбце хранятся в смежных ячейках памяти, что дает следующие преимущества: [9]
Apache Parquet реализован с использованием инфраструктуры Apache Thrift , что повышает его гибкость; он может работать с рядом языков программирования, таких как C++ , Java , Python , PHP и т. д. [10]
По состоянию на август 2015 года [11] Parquet поддерживает платформы обработки больших данных, включая Apache Hive , Apache Drill , Apache Impala , Apache Crunch, Apache Pig , Cascading , Presto и Apache Spark . Это один из внешних форматов данных, используемых библиотекой манипуляции и анализа данных Pandas Python .
В Parquet сжатие выполняется столбец за столбцом, что позволяет использовать различные схемы кодирования для текстовых и целочисленных данных. Эта стратегия также открывает возможности для внедрения новых и лучших схем кодирования по мере их изобретения.
В Parquet имеется автоматическое динамическое кодирование по словарю для данных с небольшим количеством уникальных значений (т.е. ниже 10 5 ), что обеспечивает значительное сжатие и повышает скорость обработки. [12]
Для хранения целых чисел обычно выделяются 32 или 64 бита на целое число. Для небольших целых чисел упаковка нескольких целых чисел в одно и то же пространство делает хранение более эффективным. [12]
Чтобы оптимизировать хранение нескольких вхождений одного и того же значения, одно значение сохраняется один раз вместе с количеством вхождений. [12]
Parquet реализует гибрид упаковки битов и RLE, в котором происходит переключение кодировки в зависимости от того, что дает наилучшие результаты сжатия. Эта стратегия хорошо работает для определенных типов целочисленных данных и хорошо сочетается со словарным кодированием. [12]
Apache Parquet сопоставим с форматами файлов RCFile и Optimized Row Columnar (ORC) — все три подпадают под категорию столбчатого хранения данных в экосистеме Hadoop. Все они имеют лучшее сжатие и кодирование с улучшенной производительностью чтения за счет более медленной записи. В дополнение к этим функциям Apache Parquet поддерживает ограниченную эволюцию схемы , т . е. схему можно модифицировать в соответствии с изменениями в данных . Он также предоставляет возможность добавлять новые столбцы и объединять схемы, которые не конфликтуют.
Apache Arrow разработан как дополнение к дисковым столбчатым форматам, таким как Parquet и ORC. Проекты Arrow и Parquet включают библиотеки, позволяющие читать и писать между двумя форматами. [ нужна цитата ]