Python dask ValueError:无法识别的块管理器 dask - 必须是以下之一:[]

问题描述 投票:0回答:1

我正在使用

xarray
使用
xarray.open_mfdataset
连接多个 netcdf 文件。但是,当我尝试运行代码时出现以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[21], line 1
----> 1 ds = xarray.open_mfdataset('oisst_*.nc', combine="nested", concat_dim="time")

File ~/miniconda3/lib/python3.10/site-packages/xarray/backends/api.py:1056, in open_mfdataset(paths, chunks, concat_dim, compat, preprocess, engine, data_vars, coords, combine, parallel, join, attrs_file, combine_attrs, **kwargs)
   1053     open_ = open_dataset
   1054     getattr_ = getattr
-> 1056 datasets = [open_(p, **open_kwargs) for p in paths]
   1057 closers = [getattr_(ds, "_close") for ds in datasets]
   1058 if preprocess is not None:

File ~/miniconda3/lib/python3.10/site-packages/xarray/backends/api.py:1056, in <listcomp>(.0)
   1053     open_ = open_dataset
   1054     getattr_ = getattr
-> 1056 datasets = [open_(p, **open_kwargs) for p in paths]
   1057 closers = [getattr_(ds, "_close") for ds in datasets]
   1058 if preprocess is not None:

File ~/miniconda3/lib/python3.10/site-packages/xarray/backends/api.py:579, in open_dataset(filename_or_obj, engine, chunks, cache, decode_cf, mask_and_scale, decode_times, decode_timedelta, use_cftime, concat_characters, decode_coords, drop_variables, inline_array, chunked_array_type, from_array_kwargs, backend_kwargs, **kwargs)
    572 overwrite_encoded_chunks = kwargs.pop("overwrite_encoded_chunks", None)
    573 backend_ds = backend.open_dataset(
    574     filename_or_obj,
    575     drop_variables=drop_variables,
    576     **decoders,
    577     **kwargs,
    578 )
--> 579 ds = _dataset_from_backend_dataset(
    580     backend_ds,
    581     filename_or_obj,
    582     engine,
    583     chunks,
    584     cache,
    585     overwrite_encoded_chunks,
    586     inline_array,
    587     chunked_array_type,
    588     from_array_kwargs,
    589     drop_variables=drop_variables,
    590     **decoders,
    591     **kwargs,
    592 )
    593 return ds

File ~/miniconda3/lib/python3.10/site-packages/xarray/backends/api.py:372, in _dataset_from_backend_dataset(backend_ds, filename_or_obj, engine, chunks, cache, overwrite_encoded_chunks, inline_array, chunked_array_type, from_array_kwargs, **extra_tokens)
    370     ds = backend_ds
    371 else:
--> 372     ds = _chunk_ds(
    373         backend_ds,
    374         filename_or_obj,
    375         engine,
    376         chunks,
    377         overwrite_encoded_chunks,
    378         inline_array,
    379         chunked_array_type,
    380         from_array_kwargs,
    381         **extra_tokens,
    382     )
    384 ds.set_close(backend_ds._close)
    386 # Ensure source filename always stored in dataset object

File ~/miniconda3/lib/python3.10/site-packages/xarray/backends/api.py:320, in _chunk_ds(backend_ds, filename_or_obj, engine, chunks, overwrite_encoded_chunks, inline_array, chunked_array_type, from_array_kwargs, **extra_tokens)
    309 def _chunk_ds(
    310     backend_ds,
    311     filename_or_obj,
   (...)
    318     **extra_tokens,
    319 ):
--> 320     chunkmanager = guess_chunkmanager(chunked_array_type)
    322     # TODO refactor to move this dask-specific logic inside the DaskManager class
    323     if isinstance(chunkmanager, DaskManager):

File ~/miniconda3/lib/python3.10/site-packages/xarray/namedarray/parallelcompat.py:110, in guess_chunkmanager(manager)
    108 if isinstance(manager, str):
    109     if manager not in chunkmanagers:
--> 110         raise ValueError(
    111             f"unrecognized chunk manager {manager} - must be one of: {list(chunkmanagers)}"
    112         )
    114     return chunkmanagers[manager]
    115 elif isinstance(manager, ChunkManagerEntrypoint):
    116     # already a valid ChunkManager so just pass through

ValueError: unrecognized chunk manager dask - must be one of: []

我正在使用以下代码:

import netCDF4
import numpy
import xarray

ds = xarray.open_mfdataset('oisst_*.nc', combine="nested", concat_dim="time")

我指的是这个中等页面来获取此代码。

我已经尝试过this现有方法。我按照OP的建议将xarray降级到2022.11.0,然后降级到0.21.1,重新安装dask并将xarray升级回2024.2.0,但发现问题没有成功。

我当前的 xarray 和 dask 版本是:

INSTALLED VERSIONS
------------------
commit: None
python: 3.10.10 (main, Mar 21 2023, 13:41:39) [Clang 14.0.6 ]
python-bits: 64
OS: Darwin
OS-release: 23.4.0
machine: x86_64
processor: i386
byteorder: little
LC_ALL: None
LANG: None
LOCALE: (None, 'UTF-8')
libhdf5: 1.12.2
libnetcdf: 4.9.3-development

xarray: 2024.2.0
pandas: 1.5.3
numpy: 1.23.5
scipy: 1.10.1
netCDF4: 1.6.5
pydap: None
h5netcdf: None
h5py: 3.8.0
Nio: None
zarr: None
cftime: 1.6.3
nc_time_axis: None
iris: None
bottleneck: None
dask: 2024.4.1
distributed: None
matplotlib: 3.7.1
cartopy: None
seaborn: 0.12.2
numbagg: None
fsspec: 2024.3.1
cupy: None
pint: None
sparse: None
flox: None
numpy_groupies: None
setuptools: 69.1.1
pip: 24.0
conda: 23.3.1
pytest: None
mypy: None
IPython: 8.12.0
sphinx: None
python dask python-xarray netcdf netcdf4
1个回答
0
投票

我尝试卸载 xarray 和 dask 并重新安装它们的最新版本。继续重新启动我的内核和 jupyter 笔记本并重新执行代码。之后就一切顺利,没有任何问题。

我使用的 xarray 和 dask 当前版本如下:

xarray:2024.3.0,numpy:1.23.5,netCDF4:1.6.5,dask:2024.4.2

© www.soinside.com 2019 - 2024. All rights reserved.