fastparquet 和 pyarrow 之间的比较?

问题描述 投票:0回答:6

经过一番搜索,我未能找到

fastparquet
pyarrow
的彻底比较。

我找到了这个博客post(速度的基本比较)。

还有一个 github 讨论,声称使用

fastparquet
创建的文件不支持 AWS-athena(顺便说一句,情况仍然如此吗?)

我何时/为什么要使用其中一种而不是另一种?主要优点和缺点是什么?


我的具体用例是使用

dask
处理数据,将其写入 s3,然后使用 AWS-athena 读取/分析它。

python parquet dask pyarrow fastparquet
6个回答
31
投票

我使用 fastparquet 和 pyarrow 将 protobuf 数据转换为 parquet,并使用 Athena 在 S3 中查询相同数据。然而,在我的用例中,两者都有效,这是一个 lambda 函数,包 zip 文件必须是轻量级的,所以继续使用 fastparquet。 (fastparquet 库只有约 1.1mb,而 pyarrow 库为 176mb,Lambda 包限制为 250mb)。

我使用以下内容将数据框存储为镶木地板文件:

from fastparquet import write

parquet_file = path.join(filename + '.parq')
write(parquet_file, df_data)

20
投票

但是,由于问题缺乏具体标准,而我来这里是为了一个好的“默认选择”,我想声明 DataFrame 对象的 pandas 默认引擎 是 pyarrow(请参阅 pandas 文档)。


8
投票
我要指出的是,速度比较的作者也是 pyarrow 的作者:)我可以谈论 fastparquet 案例。

从您的角度来看,最重要的是要了解兼容性。 Athena 不是 fastparquet(或 pyarrow)的测试目标之一,因此您应该在做出选择之前进行彻底测试。您可能需要为日期时间表示、空值、类型调用许多选项(

docs),这些选项对您可能很重要。

使用 dask 写入 s3 无疑是 fastparquet 的一个测试用例,我相信 pyarrow 也应该没有问题。


4
投票
我只是使用 fastparquet 来从 Elasticsearch 中获取数据并将其存储在 S3 中并使用 Athena 进行查询,没有任何问题。

我使用以下命令将数据帧作为 parquet 文件存储在 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)

我的桌子在 Athena 中看起来类似:

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")
    

3
投票
这个问题可能有点老了,但我碰巧正在研究同样的问题,并且我发现了这个基准

https://wesmckinney.com/blog/python-parquet-update/。根据它的说法,pyarrow 比 fastparquet 更快,难怪它是 dask 中使用的默认引擎。

更新:

我之前的回复的更新。我更幸运的是在谷歌云存储中使用 pyarrow 写作并使用 fastparquet 阅读。


0
投票
对于与 dask 和 pandas 一起使用,决定应该是显而易见的,因为两者都需要 pyarrow:

© www.soinside.com 2019 - 2024. All rights reserved.