使用boto3+Python列举S3文件时Glue作业报NoSuchBucket错误如何解决
问题解决办法
错误根因
你混淆了S3的桶名(Bucket)和前缀(Prefix)参数:
- 目标路径
s3://madl-temp/maxValue/中,madl-temp才是桶名,maxValue/是需要查询的路径前缀 - 原代码里把Bucket参数填成了
maxValue,自然会报NoSuchBucket的错误
修正后的完整代码
按需求实现判断路径下是否存在parquet文件的逻辑:
import boto3 s3 = boto3.client('s3') bucket_name = 'madl-temp' prefix = 'maxValue/' has_parquet = False # 列举指定前缀下的对象 response = s3.list_objects_v2(Bucket=bucket_name, Prefix=prefix) # 检查是否有后缀为.parquet的文件 if 'Contents' in response: for obj in response['Contents']: if obj['Key'].endswith('.parquet'): has_parquet = True break maxValue = has_parquet
注意:如果路径下文件超过1000个,
list_objects_v2会返回分页结果,需要处理NextContinuationToken循环拉取所有对象,避免漏判。
Glue作业额外注意事项
- 确认Glue作业关联的IAM角色拥有
s3:ListBucket权限,对应资源要包含arn:aws:s3:::madl-temp - 如果桶在非默认区域,初始化boto3客户端时要指定区域参数,比如
boto3.client('s3', region_name='us-east-1')
内容的提问来源于stack exchange,提问作者whatsinthename
相关产品推荐
相关产品推荐

