как добавить fsspec.open_local в серверную часть xarray

Следуя Q здесь, xarray читает удаленный файл grib на s3, используя cfgrib

Как мне преобразовать следующий код для использования в backend_kwargsXarray 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, временно скопировав их локально.

Другие вопросы по тегам