如何使用Dask.Array.From_Zarr在Dask中打开zarr文件?
问题现象
- 执行zarr转dask array的代码
arr = da.from_zarr('gros.zarr/time')时触发报错:
- 单独读取time这类单个坐标变量时程序可正常运行:

故障原因
da.from_zarr方法原生仅支持直接读取根目录包含.zarray元数据文件的独立zarr数组。你传入的gros.zarr/time是zarr组(Group)下的子变量路径,该路径下没有独立的zarr数组元数据文件,因此触发读取错误。而time这类坐标变量本身以独立zarr数组的形式存储在对应路径下,所以可以被正常读取。
解决方法
- 方法1:先加载zarr组再提取目标数组传入dask
这是最稳定的通用方案,不需要额外依赖其他库:import zarr import dask.array as da # 以只读模式打开整个zarr组 zroot = zarr.open("gros.zarr", mode="r") # 传入组内的目标数组对象给from_zarr完成读取 arr = da.from_zarr(zroot["time"]) - 方法2:通过xarray加载zarr数据集后提取变量
如果处理的是带维度、坐标元数据的科学计算类zarr数据集,用xarray加载逻辑更顺畅:import xarray as xr import dask.array as da ds = xr.open_zarr("gros.zarr") # 提取目标变量后转dask array arr = da.from_array(ds["time"]) - 方法3:直接传入子数组的物理路径
可以手动打开gros.zarr文件夹,找到time子目录下存在.zarray文件的完整路径,将该路径传入da.from_zarr即可读取。该方法需要手动核对目录结构,不推荐批量场景使用。
内容的提问来源于stack exchange,提问作者Severus
相关产品推荐
相关产品推荐

