Après quelques recherches, je n'ai pas réussi à trouver une comparaison approfondie de fastparquet
et pyarrow
.
J'ai trouvé ce blog post (une comparaison basique des vitesses).
et un github discussion qui affirme que les fichiers créés avec fastparquet
ne supportent pas AWS-athena (au fait, est-ce toujours le cas?)
quand/pourquoi devrais-je utiliser l'un sur l'autre? Quels sont les principaux avantages et inconvénients?
mon cas d'utilisation spécifique est le traitement de données avec dask
l'écriture sur s3, puis sa lecture/analyse avec AWS-athena.
Je tiens à souligner que l'auteur de la comparaison de vitesse est également l'auteur de pyarrow :) Je peux parler du cas fastparquet.
De votre point de vue, la chose la plus importante à savoir est la compatibilité. Athena n'est pas l'une des cibles du test de fastparquet (ou pyarrow), vous devez donc le tester attentivement avant de faire votre choix. Il y a un certain nombre d'options que vous pouvez souhaiter ( docs ) pour la représentation datetime, les valeurs NULL, les types, qui peuvent être importantes pour vous.
Ecrire sur s3 en utilisant dask est certainement un cas test pour fastparquet, et je pense que pyarrow ne devrait pas avoir de problème avec ça non plus.
Je viens d'utiliser fastparquet pour extraire des données d'Elasticsearch, les stocker dans S3 et interroger Athena, sans aucun problème.
J'ai utilisé ce qui suit pour stocker une image dans S3 en tant que fichier de parquet:
import s3fs
import fastparquet as fp
import pandas as pd
import numpy as np
s3 = s3fs.S3FileSystem()
myopen = s3.open
s3bucket = 'mydata-aws-bucket/'
# random dataframe for demo
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
parqKey = s3bucket + "datafile" + ".parq.snappy"
fp.write(parqKey, df ,compression='SNAPPY', open_with=myopen)
Ma table ressemble à celle-ci à Athéna:
CREATE EXTERNAL TABLE IF NOT EXISTS myanalytics_parquet (
`column1` string,
`column2` int,
`column3` DOUBLE,
`column4` int,
`column5` string
)
STORED AS PARQUET
LOCATION 's3://mydata-aws-bucket/'
tblproperties ("parquet.compress"="SNAPPY")