是否可以使用Fastparquet阅读器使用Dask手动读取分区的Parquet数据集



我创建了一个Parquet数据集,分区如下:

2019-taxi-trips/
- month=1/
- data.parquet
- month=2/
- data.parquet
...
- month=12/
- data.parquet

该组织遵循Hive Metastore使用的Parquet数据集分区约定。这个分区方案是手工生成的,因此目录树中的任何位置都没有_metadata文件。

我现在想把这个数据集读入Dask。

对于位于本地磁盘上的数据,以下代码有效:

import dask.dataframe as dd
dd.read_parquet(
"/Users/alekseybilogur/Desktop/2019-taxi-trips/*/data.parquet",
engine="fastparquet"
)

我将这些文件复制到S3存储桶中(通过s3 sync;分区文件夹是存储桶中的顶级密钥,就像这样(,并尝试使用相同的基本功能从云存储中读取它们:

import dask.dataframe as dd; dd.read_parquet(
"s3://2019-nyc-taxi-trips/*/data.parquet",
storage_options={
"key": "...",
"secret": "..."
},
engine="fastparquet")

这引发了IndexError: list index out of range。此处为完整堆栈跟踪。

目前是否可以直接从AWS S3读取这样的数据集?

fastparquet中当前存在一个错误,导致此代码无法工作。详见Dask GH#6713。

同时,在这个错误得到解决之前,这个问题的一个简单解决方案是使用pyarrow后端。

dd.read_parquet(
"s3://2019-nyc-taxi-trips/*/data.parquet",
storage_options={
"key": "...",
"secret": "..."
},
engine="pyarrow"
)

最新更新