ValueError: chunksize не может превышать размер измерения при попытке записать xarray в netcdf

Я получил следующую ошибку при попытке записать объект xarray в файл netcdf:

"ValueError: chunksize cannot exceed dimension size"  

Данные слишком велики для моей памяти, и их необходимо разбить на части.
В основном процедура выглядит следующим образом:

import xarray as xr  
ds=xr.open_dataset("somefile.nc",chunks={'lat':72,'lon':144}  
myds=ds.copy()
#ds is 335 (time) on 720 on 1440 and has variable var  
def some_function(x):
  return x*2
myds['newvar']=xr.DataArray(np.apply_along_axis(some_function,0,ds['var']))  
myds.drop('var')  
myds.to_netcdf("somenewfile.nc")

По сути, я просто манипулирую контентом и переписываю. Тем не менее, чанки кажутся плохими. То же самое с перенацеливанием на один массив. Я тоже ds переписать не могу. Есть идеи, как отследить ошибку или решить ее?

версия netCDF4 - 1.2.4
версия xarray (бывшая xray) - 0.8.2
версия dask - 0.10.1


person Ben Müller    schedule 06.10.2016    source источник
comment
Это похоже на ошибку xarray. Мы сможем отследить это, если вы можете предоставить автономный пример, который это воспроизводит. Следите за новостями на GitHub: github.com/pydata/xarray/issues/1225   -  person shoyer    schedule 25.01.2017


Ответы (1)


Это была проблема двигателя в команде записи. Вам нужно изменить движок с netcdf4 (по умолчанию) на scipy, если вы используете чанки!

myds.to_netcdf("somenewfile.nc",engine='scipy')

Пакет netcdf4 НЕ может записывать такие файлы.

person Ben Müller    schedule 10.10.2016