Je ne parviens pas à trouver une bibliothèque permettant l'écriture de fichiers Parquet à l'aide de Python. Des points bonus si je peux utiliser Snappy ou un mécanisme de compression similaire en conjonction avec celui-ci.
Jusqu'ici, la seule méthode que j'ai trouvée utilise Spark avec le support pyspark.sql.DataFrame
Parquet.
Certains scripts doivent écrire des fichiers Parquet qui ne sont pas des travaux Spark. Existe-t-il une approche pour écrire des fichiers Parquet en Python qui n'implique pas pyspark.sql
?
Mise à jour (mars 2017): Il existe actuellement 2 bibliothèques capables de écrire fichiers Parquet:
Il semble que les deux d'entre eux subissent un développement important et qu'ils comportent un certain nombre d'exclusions (aucun support pour les données imbriquées, par exemple), vous devrez donc vérifier s'ils prennent en charge tout ce dont vous avez besoin.
ANCIENNE REPONSE:
À partir de la version 2.2016, il ne semble PAS y avoir de bibliothèque python uniquement capable de écrire} fichiers Parquet.
Si vous avez seulement besoin de lire Fichiers Parquet, il y a python-parquet .
En guise de solution de contournement, vous devrez recourir à un autre processus tel que, par exemple. pyspark.sql
(qui utilise Py4J et s’exécute sur la machine virtuelle Java et ne peut donc pas être utilisé directement à partir de votre programme CPython moyen).
fastparquet a un support en écriture, voici un extrait pour écrire des données dans un fichier
from fastparquet import write
write('outfile.parq', df)
en utilisant fastparquet
, vous pouvez écrire un pandas df
sur un parquet avec la compression snappy
ou gzip
comme suit:
assurez-vous que vous avez installé les éléments suivants:
$ conda install python-snappy
$ conda install fastparquet
faire des importations
import pandas as pd
import snappy
import fastparquet
supposons que vous avez les pandas suivants df
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
envoyer df
au parquet avec snappy
compression
df.to_parquet('df.snap.parquet',compression='snappy')
envoyer df
au parquet avec gzip
compression
df.to_parquet('df.gzip.parquet',compression='gzip')
vérifier:
relire le parquet dans les pandas df
pd.read_parquet('df.snap.parquet')
ou
pd.read_parquet('df.gzip.parquet')
sortie:
col1 col2
0 1 3
1 2 4