远程 zarr 存储上的 open_mfdataset() 给出 zarr.errors.GroupNotFoundError

Posted

技术标签:

【中文标题】远程 zarr 存储上的 open_mfdataset() 给出 zarr.errors.GroupNotFoundError【英文标题】:open_mfdataset() on remote zarr store giving zarr.errors.GroupNotFoundError 【发布时间】:2021-02-10 21:40:00 【问题描述】:

我正在寻找使用 xarray.open_mfdataset() 读取远程 zarr 商店

我收到了zarr.errors.GroupNotFoundError: group not found at path ''。追溯在底部。

import xarray as xr
import s3fs

fs = s3fs.S3FileSystem(anon=True)
uri = "s3://era5-pds/zarr/2020/12/data/eastward_wind_at_10_metres.zarr"
file = s3fs.S3Map(uri, s3=fs)
ds = xr.open_mfdataset(file, engine="zarr")

我可以使用xr.open_zarr打开它

ds = xr.open_zarr(file)

如果我要在本地下载 zarr 商店,它可以正常工作

import xarray as xr
import s3fs
fs = s3fs.S3FileSystem(anon=True)
fs.get("s3://era5-pds/zarr/2020/12/data/eastward_wind_at_10_metres.zarr/*", "eastward_wind_at_10_metres.zarr", recursive=True)
ds = xr.open_mfdataset("eastward_wind_at_10_metres.zarr", engine="zarr")

open_mfdataset 在远程 zarr 商店的引用

>>> ds = xr.open_mfdataset(file, engine="zarr")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/ray.bell/miniconda/envs/test_env/lib/python3.8/site-packages/xarray/backends/api.py", line 948, in open_mfdataset
    datasets = [open_(p, **open_kwargs) for p in paths]
  File "/Users/ray.bell/miniconda/envs/test_env/lib/python3.8/site-packages/xarray/backends/api.py", line 948, in <listcomp>
    datasets = [open_(p, **open_kwargs) for p in paths]
  File "/Users/ray.bell/miniconda/envs/test_env/lib/python3.8/site-packages/xarray/backends/api.py", line 572, in open_dataset
    store = opener(filename_or_obj, **extra_kwargs, **backend_kwargs)
  File "/Users/ray.bell/miniconda/envs/test_env/lib/python3.8/site-packages/xarray/backends/zarr.py", line 296, in open_group
    zarr_group = zarr.open_group(store, **open_kwargs)
  File "/Users/ray.bell/miniconda/envs/test_env/lib/python3.8/site-packages/zarr/hierarchy.py", line 1166, in open_group
    raise GroupNotFoundError(path)
zarr.errors.GroupNotFoundError: group not found at path ''

【问题讨论】:

【参考方案1】:

我认为 open_mfdataset 正在您的路径上执行某种 glob,因为它需要处理多个路径(因为这是多文件)。

以下确实有效(前者可能只在master上)

ds = xr.open_mfdataset(uri, engine="zarr", backend_kwargs=dict(storage_options='anon': True))

ds = xr.open_mfdataset([file], engine="zarr")

【讨论】:

以上是关于远程 zarr 存储上的 open_mfdataset() 给出 zarr.errors.GroupNotFoundError的主要内容,如果未能解决你的问题,请参考以下文章

xarray:大于使用 map_blocks 将结果转储到 .zarr 存储的内存数组

如何最好地将 NetCDF 文件集合重新分块到 Zarr 数据集

加密存储在远程后端(如 GCS 存储桶)上的 Terraform 状态是不是有用?

是否可以通过命令行删除 Github 上的远程存储库?

删除不再在远程存储库上的本地 git 标签

如何将本地更改推送到 Bitbucket 上的远程 Git 存储库