Я читаю некоторые (очевидно) большие файлы grib с помощью xarray.Я говорю «очевидно», потому что они ~ 100 МБ каждый, что не кажется мне слишком большим.Однако, выполнение
import xarray as xr
ds = xr.open_dataset("gribfile.grib", engine="cfgrib")
занимает хорошие 5-10 минут.Хуже того, чтение одного из них занимает почти 4 ГБ ОЗУ - что меня удивляет, учитывая ленивую загрузку, которую должен делать xarray.Не менее важно, что это в 40 с лишним раз больше размера исходного файла!
Это время чтения и использование ОЗУ кажутся чрезмерными и не масштабируются для 24 файлов, которые мне нужно прочитать.
Я пытался использовать dask и xr.open_mfdataset
, но, похоже, это не помогает, когда отдельные файлы слишком велики.Любые предложения?
Приложение: набор данных выглядит так, как будто он открыт после открытия:
<xarray.Dataset>
Dimensions: (latitude: 10, longitude: 10, number: 50, step: 53, time: 45)
Coordinates:
* number (number) int64 1 2 3 4 5 6 7 8 9 ... 42 43 44 45 46 47 48 49 50
* time (time) datetime64[ns] 2011-01-02 2011-01-04 ... 2011-03-31
* step (step) timedelta64[ns] 0 days 00:00:00 ... 7 days 00:00:00
surface int64 0
* latitude (latitude) float64 56.0 55.0 54.0 53.0 ... 50.0 49.0 48.0 47.0
* longitude (longitude) float64 6.0 7.0 8.0 9.0 10.0 ... 12.0 13.0 14.0 15.0
valid_time (time, step) datetime64[ns] 2011-01-02 ... 2011-04-07
Data variables:
u100 (number, time, step, latitude, longitude) float32 6.389208 ... 1.9880934
v100 (number, time, step, latitude, longitude) float32 -13.548858 ... -3.5112982
Attributes:
GRIB_edition: 1
GRIB_centre: ecmf
GRIB_centreDescription: European Centre for Medium-Range Weather Forecasts
GRIB_subCentre: 0
history: GRIB to CDM+CF via cfgrib-0.9.4.2/ecCodes-2.9.2 ...
Я временно обошел проблему, читая файлы grib, один за другим, и записываяих на диск как netcdf.Затем xarray обрабатывает файлы netcdf, как и ожидалось.Очевидно, было бы неплохо не делать этого, потому что на это уходит много времени - я пока делал это только для 4.