尝试创建 s3 对象的本地缓存时没有此类文件错误

Posted

技术标签:

【中文标题】尝试创建 s3 对象的本地缓存时没有此类文件错误【英文标题】:No Such File Error When Trying to Create Local Cache of s3 Object 【发布时间】:2021-10-19 03:45:44 【问题描述】:

我正在尝试使用 Fsspec 在 AWS s3 上的公共访问存储桶中创建数据文件存储的本地缓存。公共访问桶位于here.

我 100% 需要在本地文件缓存中执行此操作,因为这旨在扩展,我不想物理下载每个单独的文件。我正在尝试通过使用底层 botocore 框架的 API 调用 fsspec 来做到这一点。一个简单的、最小的可重现示例如下所示:

导入 fsspec

url = 'simplecache::s3://noaa-nbm-grib2-pds/blend.20211019/01/core/blend.20211019/01/core/blend.t01z.core.f001.co.grib2
'
of = fsspec.open_local(url, s3='anon' : True, filecache='cache_storage':'/tmp/files')

如果安装了所有依赖项,则运行上述会重现错误。我尝试使用文件的对应链接地址切换 url(simplecache 方案基于一些 fsspec 文档here),但仍然出现以下错误:

ValueError: open_local can only be used on a filesystem which has attribute local_file=True

是否有一个特定的 url 应该用于这样的事情?这是对象的直接 url(插入括号以防止链接立即下载文件)

# Remove parenthesis to get full file link which is a direct file download
https://noaa-nbm-grib2-pds.s3.amazonaws.com/blend.20211019/01/core/(blend.t01z.core.f001.co.grib2)

【问题讨论】:

【参考方案1】:

以下工作正常:

fsspec.open_local("simplecache::https://noaa-nbm-grib2-pds.s3.amazonaws.com/blend.20211019/01/core/blend.t01z.core.f001.co.grib2")

但通过 s3 接口直接访问文件失败并出现 FileNotFound。这可能表明权限设置不正确,但 fsspec 的行为仍与您预期的一样。

>>> s3 = fsspec.filesystem("s3", anon=True)
>>> s3.info("s3://noaa-nbm-grib2-pds/blend.20211019/01/core/blend.20211019/01/core/blend.t01z.core.f001.co.grib2")
FileNotFoundError

【讨论】:

这确实帮助我走得更远。似乎我的远程文件系统(pygrib)没有正确读取文件。可能是文件权限问题

以上是关于尝试创建 s3 对象的本地缓存时没有此类文件错误的主要内容,如果未能解决你的问题,请参考以下文章

将文件从 s3:// 复制到本地文件系统

AWS CLI S3:使用终端在本地复制文件:致命错误:调用 HeadObject 操作时发生错误(404)

尝试将对象放入 s3 时访问被拒绝

将图像从库上传到s3存储桶 - 创建文件对象?

scp 命令上没有此类文件或目录错误

当唯一的区别是标签时,如何在两个s3桶之间同步对象