49

经过一番搜索,我未能找到fastparquet和的彻底比较pyarrow

我找到了这篇博文(速度基本比较)。

和一个 github讨论,声称使用创建的文件fastparquet不支持 AWS-athena(顺便说一句,情况仍然如此吗?)

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


我的具体用例是处理数据并将dask其写入 s3,然后使用 AWS-athena 读取/分析它。

4

5 回答 5

20

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

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

from fastparquet import write

parquet_file = path.join(filename + '.parq')
write(parquet_file, df_data)
于 2019-05-14T20:05:48.147 回答
9

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

于 2020-12-22T22:52:11.763 回答
6

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

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

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

于 2018-07-16T15:24:35.083 回答
3

我刚刚使用 fastparquet 从 Elasticsearch 中获取数据并将其存储在 S3 中并使用 Athena 进行查询,完全没有问题。

我使用以下内容将 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")
于 2019-01-25T14:57:11.223 回答
3

这个问题可能有点老了,但我碰巧在处理同样的问题,我发现了这个基准https://wesmckinney.com/blog/python-parquet-update/。据它说,pyarrow 比 fastparquet 更快,难怪它是 dask 中使用的默认引擎。

更新:

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

于 2019-07-26T08:54:39.317 回答