我想将xarray.dataset保存为.zarr文件,但是我无法将自己的块配置为统一的,因此也无法保存。
我已经尝试过:
在使用xarray.open_mfdataset时更改块大小->它仍然使用不起作用的自动块。
使用数据集时更改块大小。chunk(n)->打开数据集时仍指自动块。
代码:
import xarray as xr
import glob
import zarr
local_dir = "/directory/"
data_dir = local_dir + 'folder/'
files = glob.glob(data_dir + '*.nc')
n = 1320123
data_files = xr.open_mfdataset(files,concat_dim='TIME',chunks={'TIME': n}) # does not specify chunks, uses automatic chunks
data_files.chunk(n) # try modifying here, still uses automatic chunks
data_files.to_zarr(store=data_dir + 'test.zarr',mode='w') # I get an error about non-uniform chunks - see below
ValueError:Zarr需要统一的块大小(最终块除外)。 可变的dask块((1143410、512447、1170473、281220、852819)是) 不相容。考虑使用
chunk()
重新分块。
我希望.zarr文件保存为新的块,但是会返回到原始的自动块大小。
答案 0 :(得分:1)
Xarray的Dataset.chunk
方法返回一个新的数据集,因此您将需要更多类似的东西:
ds = xr.open_mfdataset(files, concat_dim='TIME').chunk({'TIME': n})
ds.to_zarr(...)
其他一些需要注意的细节:
为什么chunks
kwarg open_mfdataset
的行为不理想:当前,concat_dim
上的块固定为每个文件中数据的长度。我也怀疑这就是为什么您的块大小不规则的原因。
open_mfdataset
将为您完成任务。这是一个很小的时间消耗,但将来需要注意,您可以致电xr.open_mfdataset('/directory/folder/*nc', ...)
。