いくつかの検索の後、fastparquet
とpyarrow
の完全な比較を見つけることができませんでした。
このブログを見つけました post (速度の基本的な比較)。
github discussionfastparquet
で作成されたファイルはAWS-athenaをサポートしていないと主張します(それでもまだですか?)
いつ/なぜ他のものを使用するのですか?主な長所と短所は何ですか?
私の特定のユースケースは、 dask
を使用してデータを処理し、s3に書き込み、AWS-athenaで読み取り/分析することです。
Protobufデータを寄木細工に変換し、S3でAthenaを使用してクエリするために、fastparquetとpyarrowの両方を使用しました。しかし、どちらもラムダ関数である私のユースケースで機能しました。パッケージのZipファイルは軽量でなければならないため、fastparquetを進めました。 (fastparquetライブラリは約1.1MBでしたが、pyarrowライブラリは176MBで、Lambdaパッケージの制限は250MBです)。
以下を使用して、データフレームを寄木細工のファイルとして保存しました。
from fastparquet import write
parquet_file = path.join(filename + '.parq')
write(parquet_file, df_data)
速度比較の作成者はpyarrowの作成者でもあることを指摘します:)高速寄木張りのケースについて話すことができます。
あなたの観点から、知っておくべき最も重要なことは互換性です。 Athenaはfastparquet(またはpyarrow)のテスト対象の1つではないため、選択する前に徹底的にテストする必要があります。日時表現、null、型など、あなたにとって重要なオプションをいくつか( docs )呼び出すことができます。
Daskを使用してs3に書き込むことは、確かにfastparquetのテストケースであり、pyarrowでも問題はないはずです。
Elasticsearchからデータを取り出してS3に保存し、Athenaでクエリするケースにfastparquetを使用したところ、まったく問題はありませんでした。
以下を使用して、S3のデータフレームを寄木細工のファイルとして保存しました。
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)
私のテーブルは、アテナでは次のように見えます。
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")
この質問は少し古いかもしれませんが、私はたまたま同じ問題に取り組んでおり、このベンチマークを見つけました https://wesmckinney.com/blog/python-parquet-update/ それによると、pyarrowはfastparquetよりも速く、それが夕暮れで使用されるデフォルトのエンジンであることはほとんど不思議ではありません。
更新:
以前の回答の更新。 googleクラウドストレージで、pyarrowを使って書いたり、fastparquetを使って読んだりすることは、より幸運でした。