python - 尝试创建 s3 对象的本地缓存时没有此类文件错误
问题描述
我正在尝试使用 Fsspec 在 AWS s3 上的公共访问存储桶中创建数据文件存储的本地缓存。公共访问存储桶位于此处。
我 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 文档),但仍然出现以下错误:
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)
解决方案
以下工作正常:
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
推荐阅读
- c# - 协程等待 3 秒后不会加载新场景
- typescript - 为什么“字符串和数字”在 Typescript 中没有被评估为“从不”?
- typescript - 父类 TypeScript 无法识别子方法
- html - 容器外的图像是否有可能,如果我缩小图像会粘在浏览器的左侧?
- .net-core - GraphQL .Net 订阅 EventStreamFieldType 未订阅 IObserverable
- node.js - 内容安全策略问题节点 js 反应
- nginx - CERTBOT 在 NGINX 服务器中找不到“SUBDOMAIN”的有效 IP 地址
- r - 如何根据 var1 (x) 的不同截止值绘制 %Sensitivity (y) 并为 R 上的每个观察值显示一个点?
- javascript - javascript 根据 url 参数从数组中获取属性
- pyspark - PySpark - 使用 UTF-16 编码解析 CSV 文件