权限错误:从AWS S3读取文件时被拒绝访问。

4

我正在使用Python和Jupyter Notebook,尝试从AWS S3存储桶中读取Parquet文件,并将它们转换为一个Pandas数据帧。

存储桶和文件夹的排列方式如下:

The bucket name: mybucket
   First Folder: 123
      Second Folder: Parquets.parquet
        file1.snappy.parquet
        file2.snappy.parquet
        ....

我正在使用以下代码获取完整路径:

bucket = s3.Bucket(name='mybucket')
keys =[]
for key in bucket.objects.all():
  keys.append("s3://mybucket/"+key.key)

然后可以通过以下方式读取这些数据:

count = 0
keys = keys[2:]
for obj in bucket.objects.all():
    subsrc = obj.Object()
    key = obj.key 
    path = keys[count]
    obj_df = pd.read_parquet(path)
    df_list.append(obj_df)
    count +=1
    

df = pd.concat(df_list)

但是那给了我:

PermissionError: Forbidden 

指向行'obj_df = pd.read_parquet(path)',我知道我有完全的s3访问权限,所以那不应该是问题。非常感谢!

1
使用aws-cli确保您正确地假设您具有访问权限 - aws s3 ls <PATH>列出密钥,然后使用aws s3 cp <PATH> .将对象下载到本地。 - Jesse Vogt
这需要下载文件吗?我想把文件保留在Jupyter笔记本上,而不是我的本地计算机上。 - user13757206
1
下载只是确保您实际拥有访问权限。您可能具有某种类型的列表访问权限,但无法阅读。 - Jesse Vogt
你是否用实际路径替换了 <PATH> - Jesse Vogt
如果路径中有空格,则您可能需要使用引号或转义处理。 - Jesse Vogt
显示剩余4条评论
1个回答

4

这很可能是因为数据路径不正确。

(在上面的代码中,你正在执行pd.read_parquet(path),其中path = keys[count],但我相信那只是keys,它们不包括桶名称。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接