как добавить fsspec.open_local в серверную часть xarray
Следуя Q здесь, xarray читает удаленный файл grib на s3, используя cfgrib
Как мне преобразовать следующий код для использования в
backend_kwargs
Xarray
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'
1 ответ
Извините, это невозможно при нынешних обстоятельствах.
xr.open_dataset
ожидает либо URL-адрес, который fsspec может превратить в открытый файлоподобный объект, либо локальный путь. задача состоит в том, чтобы обработать URL-адрес и вернуть строку в локальную копию, поэтому она не совсем подходит. fcgrib обрабатывает открытые файловые объекты, пытаясь извлечь из них локальный путь и (повторно) открыть его.
Было бы разумно иметь функцию в fsspec, которая может делать то, что
open_local
делает, но возвращает открытый файл. См. обсуждение на fsspec-reference-maker для идей о том, как мы можем справиться с открытием (многих) удаленных grib2, временно скопировав их локально.