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

No Such File Error When Trying to Create Local Cache of s3 Object

我正在尝试使用 Fsspec 在 AWS s3 上的 public 访问存储桶中创建数据文件存储的本地缓存。 public 访问存储桶位于 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 切换为文件的已处理 link 地址(simplecache 方案基于一些 fsspec 文档 here),但这仍然会出现以下错误:

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

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

# 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)

以下工作正常:

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