我想了解是什么导致了我在以下情况下收到的警告消息:
在之前的操作中,我创建了一些 NetCDF 文件并使用
xarray.to_netcdf()
将它们保存到磁盘。
这些数据集的惰性评估在 jupyter notebook 中非常好,在以下情况下我没有收到警告/错误:
.nc
打开这些
ds = xarray.open_mfdataset('/path/to/files/*.nc')
ds.time.values
ds.sel(time=starttime)
在对内存加载数据进行计算时,我似乎能够做我想做的所有事情。但是,我经常在以下情况下收到相同的错误集:
ds.sel(time=starttime).SCALAR_DATA.plot()
ts = pd.Series(ds.SCALAR_DATA.loc[:,y,x], index=other_data.index)
请注意,尽管有这些警告,我执行的操作确实会产生预期的结果(绘图、时间序列结构等)。
生成以下错误的共同点似乎是从打开的数据集中加载数据。编辑:经过进一步的实验,我的工作环境中的包版本可能会在依赖 HDF5 的包版本之间引起一些冲突。
以下错误重复多次。
HDF5-DIAG: Error detected in HDF5 (1.12.2) thread 1:
#000: H5A.c line 528 in H5Aopen_by_name(): can't open attribute
major: Attribute
minor: Can't open object
#001: H5VLcallback.c line 1091 in H5VL_attr_open(): attribute open failed
major: Virtual Object Layer
minor: Can't open object
#002: H5VLcallback.c line 1058 in H5VL__attr_open(): attribute open failed
major: Virtual Object Layer
minor: Can't open object
#003: H5VLnative_attr.c line 130 in H5VL__native_attr_open(): can't open attribute
major: Attribute
minor: Can't open object
#004: H5Aint.c line 545 in H5A__open_by_name(): unable to load attribute info from object header
major: Attribute
minor: Unable to initialize object
#005: H5Oattribute.c line 494 in H5O__attr_open_by_name(): can't locate attribute: '_QuantizeBitGroomNumberOfSignificantDigits'
major: Attribute
minor: Object not found
...
HDF5-DIAG: Error detected in HDF5 (1.12.2) thread 2:
#000: H5A.c line 528 in H5Aopen_by_name(): can't open attribute
major: Attribute
minor: Can't open object
#001: H5VLcallback.c line 1091 in H5VL_attr_open(): attribute open failed
major: Virtual Object Layer
minor: Can't open object
#002: H5VLcallback.c line 1058 in H5VL__attr_open(): attribute open failed
major: Virtual Object Layer
minor: Can't open object
#003: H5VLnative_attr.c line 130 in H5VL__native_attr_open(): can't open attribute
major: Attribute
minor: Can't open object
#004: H5Aint.c line 545 in H5A__open_by_name(): unable to load attribute info from object header
major: Attribute
minor: Unable to initialize object
#005: H5Oattribute.c line 476 in H5O__attr_open_by_name(): can't open attribute
major: Attribute
minor: Can't open object
#006: H5Adense.c line 394 in H5A__dense_open(): can't locate attribute in name index
major: Attribute
minor: Object not found
任何可能导致这些问题的建议将不胜感激。
过去几天我一直在与非常相似的错误作斗争,最终发现将我的 dask 客户端限制为每个工作人员使用 1 个线程解决了这个问题,即:
import xrarray as xr
from dask.distributed import Client
c = Client(n_workers=os.cpu_count()-2, threads_per_worker=1)
ds = xr.open_mfdataset('/path/to/files/*.nc')
ds.sel(.... )
如果 jpolly 的解决方案不适合你,值得一试(就我而言,我没有使用 conda ...)
让
conda
解决各种包之间的依赖关系真的最终成为为我摆脱这些警告的解决方案。
当我在没有仔细指定版本或让
conda
解决依赖关系的情况下手动安装所有不同的包时,警告仍然存在。
编辑:在这个答案中对此有一个很好的解释。
这些警告可能是由
netcdf4
版本1.6.X
引起的。
降级到
netcdf4=1.5.8
解决了我的问题。