amazon-s3 - 从深 S3 路径层次结构中的 CSV 读取 Dask DataFrame

标签 amazon-s3 boto3 boto dask dask-distributed

我正在尝试在 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/

相关文章:

java - 如何使用ListVersionsRequest、JAVA从S3获取确切文件的信息?

python - Boto S3 delete_keys 方法指示删除不存在的 key

python - 如何在 boto S3 中获取文件/ key 大小?

python - 有没有更高效的方法来排序这个数组?

python - Boto3 Athena 未显示所有表格

python - Boto Ec2 和弹性 IP

django的collectstatic收集到意外的目录中

parameters - Boto3 Dynamo DB 查询将 FilterExpression 设置为无?

python - 如何使用 boto 有效地将所有文件从一个目录复制到另一个目录中的 amazon S3 存储桶中?

python - 当我在没有过滤器的情况下在 Dynamodb 中执行 scan() 并仅检索 10 个对象时,它是否仍然访问整个数据库?