Як прочитати файл паркету в Pandas DataFrame?


81

Як прочитати набір даних Parquet невеликого розміру в пам’яті Pandas DataFrame, не налаштовуючи кластерну обчислювальну інфраструктуру, таку як Hadoop чи Spark? Це лише помірний обсяг даних, які я хотів би прочитати в пам'яті за допомогою простого скрипта Python на ноутбуці. Дані не містяться на HDFS. Це або в локальній файловій системі, або, можливо, у S3. Я не хочу крутити та налаштовувати інші служби, такі як Hadoop, Hive чи Spark.

Я думав, Blaze / Odo зробив би це можливим: в документації Odo згадується паркет, але, схоже, всі приклади проходять зовнішню роботу в Hive.


3
Ви випадково маєте дані у відкритому доступі? У моїй гілці python-parquet github.com/martindurant/parquet-python/tree/py3 був пристрій для читання панд у parquet.rparquet, ви можете спробувати. Є багато паркетних конструкцій, з якими він не справляється.
мдурант

4
Зачекайте на проект Apache Arrow, частиною якого є автор "Панд" Вес Макінні. wesmckinney.com/blog/pandas-and-apache-arrow Після того, як це буде зроблено, користувачі повинні мати змогу читати у файлі Parquet безпосередньо з Pandas.
XValidated

4
Оскільки питання закрите як нетематичне (але все-таки перший результат у Google), я повинен відповісти у коментарі .. Тепер ви можете використовувати pyarrow для читання паркетного файлу та перетворення його у панду DataFrame:import pyarrow.parquet as pq; df = pq.read_table('dataset.parq').to_pandas()
sroecker

4
Своєрідно дратується, що це питання було закрите. Іскра та паркет (все ще) відносно погано задокументовані. Я також шукаю відповідь на це.
користувач48956

2
Як бібліотеки fastparquet, так і pyarrow дають можливість читати файл паркету у фреймі даних pandas: github.com/dask/fastparquet та arrow.apache.org/docs/python/parquet.html
ogrisel

Відповіді:


101

pandas 0.21 представляє нові функції для паркету :

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

або

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

Наведене посилання пояснює:

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


9
Для більшості моїх даних "fastparquet" трохи швидший. Про всяк випадок, якщо pd.read_parquet()повертається проблема з помилкою Snappy, запустіть conda install python-snappyінсталяцію snappy.
Catbuilts,

Я виявив, що pyarrow занадто складний для встановлення (як на моїй локальній машині Windows, так і на хмарній машині Linux). Навіть після виправлення python-snappy виникали додаткові проблеми з компілятором, а також модуль помилки 'pyarrow' не має атрибута 'compat'. у fastparquet взагалі не було проблем.
Себ

1
@Catbuilts Ви можете використовувати gzip, якщо у вас немає хитрості.
Хан,

може "fastparquet" прочитати ", файл snappy.parquet"?
Сесілія

19

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

Існує зчитувач паркету python, який працює відносно добре: https://github.com/jcrobak/parquet-python

Він створить об’єкти python, а потім вам доведеться перемістити їх до Pandas DataFrame, щоб процес був повільнішим, ніж, pd.read_csvнаприклад.


9
Насправді є pyarrow, який дозволяє обидва читати / писати: pyarrow.readthedocs.io/en/latest/parquet.html
bluszcz

Я отримую дозвіл на відхилення помилки, коли намагаюся перейти за вашим посиланням, @bluszcz - чи є у вас альтернативний варіант?
snooze_bear

1
parquet-python набагато повільніший за альтернативи, такі як fastparquet et pyarrow: arrow.apache.org/docs/python/parquet.html
ogrisel

1
pd.read_parquetзараз є частиною панд. Іншу відповідь слід позначити як дійсну.
ogrisel

7

Окрім панд, Apache pyarrow також забезпечує спосіб перетворення паркету на фрейм даних

Код простий, просто введіть:

import pyarrow.parquet as pq

df = pq.read_table(source=your_file_path).to_pandas()

Для отримання додаткової інформації див. Документ із Apache pyarrow Читання та запис окремих файлів

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.