Как прочитать файл Parquet в Pandas DataFrame?

Как прочитать набор данных Parquet с небольшим размером в DataFrame в памяти Pandas без настройки инфраструктуры кластерных вычислений, такой как Hadoop или Spark? Это всего лишь умеренный объем данных, которые я хотел бы прочитать в памяти с помощью простого Python script на ноутбуке. Данные не находятся на HDFS. Это либо в локальной файловой системе, либо, возможно, на S3. Я не хочу раскручивать и настраивать другие сервисы, такие как Hadoop, Hive или Spark.

Я думал, что Blaze/Odo сделал бы это возможным: документация Odo упоминает Parquet, но примеры, похоже, все проходят через внешнюю среду Hive.

Ответы

Ответ 1

pandas 0.21 вводит новые функции для Паркета:

pd.read_parquet('example_pa.parquet', engine='pyarrow')

или

pd.read_parquet('example_fp.parquet', engine='fastparquet')

В приведенной выше ссылке поясняется:

Эти двигатели очень похожи и должны читать/писать почти одинаковые файлы формата паркета. Эти библиотеки отличаются наличием разных базовых зависимостей (fastparquet с использованием numba, в то время как pyarrow использует c-библиотеку).

Ответ 2

Обновление: с тех пор, как я ответил на это, было много работы над этим взглядом на Apache Arrow для лучшего чтения и записи паркета. Также: http://wesmckinney.com/blog/python-parquet-multithreading/

Существует приложение для чтения паркета python, которое работает относительно хорошо: https://github.com/jcrobak/parquet-python

Он создаст объекты python, и вам придется переместить их в Pandas DataFrame, поэтому процесс будет медленнее, чем pd.read_csv, например.