问题描述
在此处关注 Q xarray read remote grib file on s3 using cfgrib
我将如何转换以下代码以在 xarray 的 backend_kwargs
的 open_dataset
中使用。
import fsspec
import xarray as xr
uri = "simplecache::s3://mf-nwp-models/arpege-world/v2/2021-02-16/00/UGrd/10m/0h.grib2"
file = fsspec.open_local(uri,s3={'anon': True},filecache={'cache_storage':'/tmp/files'})
ds = xr.open_dataset(file,engine="cfgrib")
到
ds = xr.open_dataset(
uri,engine="cfgrib",backend_kwargs=dict(s3={"anon": True},filecache={"cache_storage": "/tmp/files"}),)
但是得到ERROR:cfgrib.messages:Can't create file 'simplecache::s3://mf-nwp-models/arpege-world/v2/2021-02-16/00/UGrd/10m/0h.grib2.90c91.idx'
解决方法
抱歉,目前情况下这是不可能的。 xr.open_dataset
需要一个 URL,fsspec 可以将其转换为一个打开的类文件对象,或者一个本地路径。 open_local
的任务是处理 URL 并将字符串返回到本地副本 - 所以它不太适合。 fcgrib 通过尝试从它们中提取本地路径并(重新)打开它来处理打开的类文件对象。
在 fsspec 中有一个函数可以做 open_local
所做的事情,但返回一个打开的文件是合理的。请参阅 fsspec-reference-maker 上的讨论,了解我们如何通过在本地临时复制(许多)远程 grib2 来处理它们的打开。