Parquet - это столбчатый формат файла для сериализации данных. Чтение файла Parquet требует распаковки и декодирования его содержимого в некую структуру данных в памяти. Он спроектирован так, чтобы экономить пространство / ввод-вывод за счет использования ЦП для декодирования. Он не предоставляет никаких структур данных для вычислений в памяти. Parquet - это потоковый формат, который необходимо декодировать от начала до конца, хотя недавно в формат хранения были добавлены некоторые средства "индексной страницы", в целом операции произвольного доступа являются дорогостоящими.
С другой стороны, Arrow - это, прежде всего, библиотека, предоставляющая столбчатые структуры данных для вычислений в памяти. При чтении файла Parquet вы можете распаковать и декодировать данные в столбчатые структуры данных со стрелками, чтобы затем можно было выполнять анализ декодированных данных в памяти. Столбчатый формат со стрелками имеет несколько хороших свойств: произвольный доступ - это O (1), и каждая ячейка значения находится рядом с предыдущей и следующей ячейкой в памяти, поэтому перебор является эффективным.
А что насчет "стрелочных файлов"? Apache Arrow определяет двоичный протокол «сериализации» для организации коллекции столбчатых массивов Arrow (называемых «пакетом записей»), которые можно использовать для обмена сообщениями и межпроцессного взаимодействия. Вы можете разместить протокол где угодно, в том числе на диске, который позже может быть отображен в памяти или считан в память и отправлен в другое место.
Этот протокол Arrow разработан таким образом, что вы можете «сопоставить» большой двоичный объект данных Arrow без какой-либо десериализации, поэтому при выполнении аналитики данных протокола Arrow на диске можно использовать сопоставление памяти и практически без затрат. Протокол используется для многих вещей, таких как потоковая передача данных между Spark SQL и Python для запуска функций pandas с фрагментами данных Spark SQL, которые называются «pandas udfs».
В некоторых приложениях Parquet и Arrow могут использоваться как взаимозаменяемые для сериализации данных на диске. Следует помнить о некоторых вещах:
- Parquet предназначен для «архивных» целей, то есть, если вы напишете файл сегодня, мы ожидаем, что любая система, которая говорит, что она может «читать Parquet», сможет прочитать файл через 5 или 7 лет. Мы еще не делаем этого утверждения о долгосрочной стабильности формата Arrow (хотя, возможно, в будущем)
- Паркет обычно намного дороже читать, потому что его нужно декодировать в какую-то другую структуру данных. Данные протокола стрелки могут быть просто отображены в памяти.
- Файлы Parquet часто намного меньше, чем Arrow-protocol-on-disk из-за схем кодирования данных, которые использует Parquet. Если ваше дисковое хранилище или сеть медленные, Parquet будет лучшим выбором.
Таким образом, файлы Parquet предназначены для дискового хранения, а Arrow предназначены для хранения в памяти (но вы можете поместить их на диск, а затем отобразить карту памяти). Они предназначены для совместимости друг с другом и совместного использования в приложениях.
Для интерфейсного приложения, интенсивно использующего память, я мог бы предложить посмотреть библиотеку Arrow JavaScript (TypeScript).
person
Wes McKinney
schedule
06.06.2019