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

问题描述

我希望使用 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",in <listcomp>
    datasets = [open_(p,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 ''

解决方法

我认为 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")

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...