我正在尝试在 Dask DataFrame 中读取 S3 中的一组 CSV。 存储桶具有很深的层次结构,并且还包含一些元数据文件。 通话看起来像
dd.read_csv('s3://mybucket/dataset/*/*/*/*/*/*.csv')
这会导致 Dask 挂起。真正的问题是 s3fs.glob
在尝试解析具有那么多星星的 glob 模式时挂起。我尝试用 boto3.list_objects
计算的显式列表替换 glob,但它最多可以返回 1000 条路径;我有更多的数量级。
如何有效地将这组文件指定为 dask.dataframe.read_csv
?
重构此问题的一种方法可能是:如何在 Python 中有效地获取大型 S3 存储桶的完整递归列表?这忽略了存在一些其他基于模式的调用 dask.dataframe.read_csv
的可能性。
最佳答案
您可以使用 Paginatiors在 boto3 中列出存储桶中的所有对象。您还可以指定要将搜索限制到的前缀。文档中提供了此类代码的示例,您可以简单地复制粘贴它并替换存储桶名称和前缀。
import boto3
client = boto3.client('s3')
paginator = client.get_paginator('list_objects')
operation_parameters = {'Bucket': 'my-bucket',
'Prefix': 'foo/baz'}
page_iterator = paginator.paginate(**operation_parameters)
for page in page_iterator:
print(page['Contents'])
关于amazon-s3 - 从深 S3 路径层次结构中的 CSV 读取 Dask DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56554399/