Est-il possible d'enregistrer une trame de données pandas directement dans un fichier parquet? Sinon, quel serait le processus suggéré?
Le but est de pouvoir envoyer le fichier parquet à une autre équipe, qu'ils pourront utiliser scala pour le lire/l'ouvrir. Merci!
Pandas a une fonction centrale to_parquet()
. Écrivez simplement la trame de données au format parquet comme ceci:
df.to_parquet('myfile.parquet')
Vous devez toujours installer une bibliothèque de parquet telle que fastparquet
. Si plusieurs bibliothèques parquet sont installées, vous devez également spécifier le moteur que vous souhaitez pandas utiliser, sinon il faudra le premier à installer (comme dans le documentation ). Par exemple:
df.to_parquet('myfile.parquet', engine='fastparquet')
Il existe une implémentation relativement précoce d'un package appelé fastparquet - ce pourrait être un bon cas d'utilisation pour ce dont vous avez besoin.
https://github.com/dask/fastparquet
conda install -c conda-forge fastparquet
ou
pip install fastparquet
from fastparquet import write
write('outfile.parq', df)
ou, si vous souhaitez utiliser certaines options de fichier, comme le regroupement/compression des lignes:
write('outfile2.parq', df, row_group_offsets=[0, 10000, 20000], compression='GZIP', file_scheme='Hive')
pyarrow prend en charge le stockage de pandas dataframes:
import pyarrow
pyarrow.Table.from_pandas(dataset)
Oui c'est possible. Voici un exemple de code:
import pyarrow as pa
import pyarrow.parquet as pq
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
table = pa.Table.from_pandas(df, preserve_index=True)
pq.write_table(table, 'output.parquet')
c'est l'approche qui a fonctionné pour moi - similaire à ce qui précède - mais a également choisi de stipuler le type de compression:
import pandas as pd
configurer la trame de données de test
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
importer la bibliothèque de parquet requise (assurez-vous qu'elle a été installée, j'ai utilisé: $ conda install fastparquet
)
import fastparquet
convertir le cadre de données en parquet et l'enregistrer dans le répertoire actuel
df.to_parquet('df.parquet.gzip', compression='gzip')
lire le fichier parquet dans le répertoire courant, dans un cadre de données pandas
pd.read_parquet('df.parquet.gzip')
production:
col1 col2
0 1 3
1 2 4