尝试创建 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 对象的本地缓存时没有此类文件错误的主要内容,如果未能解决你的问题,请参考以下文章