是否可以使用 Dask 和 Fastparquet 阅读器读取手动分区的 Parquet 数据集?
Posted
技术标签:
【中文标题】是否可以使用 Dask 和 Fastparquet 阅读器读取手动分区的 Parquet 数据集?【英文标题】:Is it possible to read a Parquet dataset partitioned by hand using Dask with the Fastparquet reader? 【发布时间】:2021-01-22 19:43:35 【问题描述】:我创建了一个 Parquet 数据集,分区如下:
2019-taxi-trips/
- month=1/
- data.parquet
- month=2/
- data.parquet
...
- month=12/
- data.parquet
该组织遵循 Hive Metastore 使用的 Parquet dataset partitioning convention。此分区方案是手动生成的,因此目录树中的任何位置都没有_metadata
文件。
我现在想将此数据集读入 Dask。
如果数据位于本地磁盘上,则以下代码有效:
import dask.dataframe as dd
dd.read_parquet(
"/Users/alekseybilogur/Desktop/2019-taxi-trips/*/data.parquet",
engine="fastparquet"
)
我将这些文件复制到 S3 存储桶(通过 s3 sync
;分区文件夹是存储桶中的***键 like so),并尝试使用相同的基本功能从云存储中读取它们:
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
。 Full stack trace here.
目前是否可以直接从 AWS S3 读取这样的数据集?
【问题讨论】:
这听起来像是一个错误,你应该在 dask 跟踪器上发布 归档为github.com/dask/dask/issues/6713。 【参考方案1】:fastparquet
中当前存在一个错误,导致此代码无法正常工作。详情请见Dask GH#6713。
与此同时,在解决此错误之前,解决此问题的一个简单方法是改用 pyarrow
后端。
dd.read_parquet(
"s3://2019-nyc-taxi-trips/*/data.parquet",
storage_options=
"key": "...",
"secret": "..."
,
engine="pyarrow"
)
【讨论】:
以上是关于是否可以使用 Dask 和 Fastparquet 阅读器读取手动分区的 Parquet 数据集?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Dask 从多个 Python 进程编写 Parquet 文件