web-dev-qa-db-fra.com

Méthodes d'écriture de fichiers de parquet avec Python?

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

21
octagonC

Mise à jour (mars 2017): Il existe actuellement 2 bibliothèques capables de écrire fichiers Parquet:

  1. fastparquet
  2. pyarrow

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).

15
rkrzr

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)
4
Muayyad Alsadi

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
1
Grant Shannon