是否可以使用 Dask 和 Fastparquet reader 读取手动分区的 Parquet 数据集?
Is it possible to read a Parquet dataset partitioned by hand using Dask with the Fastparquet reader?
我创建了一个分区如下的 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 读取此类数据集吗?
目前 fastparquet
中有一个错误阻止此代码工作。有关详细信息,请参阅 Dask GH#6713。
同时,在解决此错误之前,解决此问题的一个简单方法是改用 pyarrow
后端。
dd.read_parquet(
"s3://2019-nyc-taxi-trips/*/data.parquet",
storage_options={
"key": "...",
"secret": "..."
},
engine="pyarrow"
)
我创建了一个分区如下的 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 读取此类数据集吗?
目前 fastparquet
中有一个错误阻止此代码工作。有关详细信息,请参阅 Dask GH#6713。
同时,在解决此错误之前,解决此问题的一个简单方法是改用 pyarrow
后端。
dd.read_parquet(
"s3://2019-nyc-taxi-trips/*/data.parquet",
storage_options={
"key": "...",
"secret": "..."
},
engine="pyarrow"
)