pyarrow从S3读取拼花地板的性能混淆



我在AWS S3中有一个Parquet文件。我想把它读成Pandas DataFrame。我有两种方法可以做到这一点。

1)
import pyarrow.parquet as pq
table = pq.read_table("s3://tpc-h-parquet/lineitem/part0.snappy.parquet") (takes 1 sec)
pandas_table = table.to_pandas() ( takes 1 sec !!! )
2)
import pandas as pd
table = pd.read_parquet("s3://tpc-h-parquet/lineitem/part0.snappy.parquet") (takes 2 sec)

我怀疑选项2实际上只是在做选项1。

对我来说,把Parquet文件读入Pandas的最快方法是什么?

你是对的。选项2只是引擎盖下的选项1。

对我来说,将Parquet文件读入Pandas的最快方法是什么?

选项1和选项2可能都足够好。然而,如果你想剃掉每一点,你可能需要再深入一层,这取决于你的pyarrow版本。事实证明,选项1实际上也只是一个代理,在这种情况下是数据集API的代理:

import pyarrow.dataset as ds
dataset = ds.dataset("s3://tpc-h-parquet/lineitem/part0.snappy.parquet")
table = dataset.to_table(use_threads=True)
df = table.to_pandas()

对于pyarrow版本>=4和<7使用异步扫描仪通常可以在S3上获得稍好的性能

import pyarrow.dataset as ds
dataset = ds.dataset("s3://tpc-h-parquet/lineitem/part0.snappy.parquet")
table = dataset.to_table(use_threads=True, use_async=True)
df = table.to_pandas()

在pyarrow版本7中,异步扫描仪是默认的,因此您可以再次简单地使用pd.read_parquet("s3://tpc-h-parquet/lineitem/part0.snappy.parquet")

最新更新