Подтвердить что ты не робот

Способы записи файлов Parquet с использованием Python?

У меня возникли проблемы с поиском библиотеки, которая позволяет писать файлы Parquet с использованием Python. Бонусные очки, если я могу использовать Snappy или аналогичный механизм сжатия в сочетании с ним.

До сих пор единственным методом, который я нашел, является использование Spark с поддержкой pyspark.sql.DataFrame Parquet.

У меня есть некоторые скрипты, которые должны писать файлы Parquet, которые не являются заданиями Spark. Есть ли подход к написанию файлов Parquet в Python, который не включает pyspark.sql?

4b9b3361

Ответ 1

Обновление (март 2017): В настоящее время существуют 2 библиотеки, способные писать файлы Parquet:

Оба из них по-прежнему находятся в тяжелом развитии, и они приходят с несколькими отказами (без поддержки вложенных данных, например), поэтому вам нужно будет проверить, поддерживают ли они все, что вам нужно.

СТАРЫЙ ОТВЕТ:

По состоянию на 2.2016, похоже, нет библиотеки, содержащей только python, которая может писать файлы Parquet.

Если вам нужны только файлы Parquet, python-паркет.

В качестве обходного пути вам придется полагаться на какой-то другой процесс, например, pyspark.sql (который использует Py4J и запускается на JVM и поэтому не может использоваться непосредственно из вашей средней программы CPython).

Ответ 2

FastParquet имеет поддержку записи, вот фрагмент для записи данных в файл

from fastparquet import write
write('outfile.parq', df)

Ответ 3

с помощью fastparquet вы можете написать панд df на паркет либо с snappy или gzip сжатия следующим образом:

убедитесь, что вы установили следующее:

$ conda install python-snappy
$ conda install fastparquet

делать импорт

import pandas as pd 
import snappy
import fastparquet

Предположим, у вас есть следующие панды df

df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})

отправить df на паркет с snappy сжатием

df.to_parquet('df.snap.parquet',compression='snappy')

отправить df на паркет со сжатием gzip

df.to_parquet('df.gzip.parquet',compression='gzip')

проверять:

прочитать паркет обратно в панд df

pd.read_parquet('df.snap.parquet')

или же

pd.read_parquet('df.gzip.parquet')

выход:

   col1 col2
0   1    3
1   2    4