Проблемы с кусками (Dask, xarray, zarr) - PullRequest
0 голосов
/ 08 мая 2019

Я хочу сохранить набор xarray.dataset в виде файла .zarr, но я не могу настроить свои блоки как единообразные, и он не будет сохранен.

Я пробовал:

изменение размера чанка при использовании xarray.open_mfdataset -> он по-прежнему использует автоматические чанки, которые не работают.

изменение размера чанка при использовании dataset.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 требует одинакового размера чанка, за исключением окончательного чанка. Куски переменной переменной ((1143410, 512447, 1170473, 281220, 852819),) несовместимыми. Рассмотрите возможность повторного разбиения, используя chunk().

Я ожидаю, что файл .zarr сохранится с новыми чанками, но ссылается на оригинальные автоматические размеры чанков.

1 Ответ

1 голос
/ 08 мая 2019

Метод 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', ...).

...