pandas 从S3阅读Parquet地板的最快方法

ni65a41a  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(56)

我在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的最快方法是什么?

tnkciper

tnkciper1#

你说得对。选项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")

相关问题