Методы написания паркетных файлов с помощью Python?
у меня возникли проблемы с поиском библиотеки, которая позволяет писать паркетные файлы с помощью Python. Бонусные баллы, если я могу использовать Snappy или аналогичный механизм сжатия в сочетании с ним.
до сих пор единственным методом, который я нашел, является использование Spark с pyspark.sql.DataFrame
поддержка паркетный.
у меня есть несколько скриптов, которые должны писать паркетные файлы, которые не являются заданиями Spark. Есть ли какой-либо подход к написанию паркетных файлов в Python, который не включает pyspark.sql
?
3 ответов
Обновление (Март 2017): В настоящее время 2 библиотеки способны писать паркетный файлы:
оба они все еще находятся в тяжелом развитии, кажется, и они поставляются с рядом отказов (без поддержки вложенных данных, например), поэтому вам придется проверить, поддерживают ли они все, что вам нужно.
старый Ответ:
по состоянию на 2.2016, похоже, нет библиотеки только для python, способной писать файлы паркет.
Если вам нужны только читать паркетные файлы есть python-паркет.
в качестве обходного пути вам придется полагаться на какой-то другой процесс, например pyspark.sql
(который использует Py4J и работает на JVM и, следовательно, не может использоваться непосредственно из вашей средней программы CPython).
fastparquet есть поддержка записи, вот фрагмент для записи данных в файл
from fastparquet import write
write('outfile.parq', df)
используя fastparquet
вы можете написать панд df
паркет либо сsnappy
или gzip
сжатие следующим образом:
убедитесь, что вы установили следующее:
$ conda install python-snappy
$ conda install fastparquet
do imports
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