1

我创建了一个 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 读取这样的数据集?

4

1 回答 1

1

当前有一个错误fastparquet阻止此代码工作。有关详细信息,请参阅Dask GH#6713

同时,在解决此错误之前,解决此问题的一个简单方法是改用pyarrow后端。

dd.read_parquet(
    "s3://2019-nyc-taxi-trips/*/data.parquet",
    storage_options={
        "key": "...",
        "secret": "..."
    },
    engine="pyarrow"
)
于 2020-10-11T17:27:05.243 回答