1

我有一个 17GB 的 GRIB 文件,其中包含2020 年每小时的温度 ( t2mlongitude ) 数据。数据集的维度是、latitudetime

我的目标是计算全年数据中每个坐标(经度、纬度)的最高温度。我可以使用 Xarray 很好地加载文件,但需要 4-5 分钟:

import xarray as xr
xarray_dataset = xr.open_dataset('cds/2020_hourly_t2m.grib', engine='cfgrib')

但是调用xarray.Dataset.max()会导致 Google Colab 会话崩溃。这可能是因为它需要的不仅仅是可用内存。

因此,我可能需要使用 Dask 以块的形式加载数据,并对这些块进行计算并聚合结果。我是 Dask 的新手,发现使用 Dask.Array API 分块读取气候数据集文件很困难。我已经尝试过dask.array.from_array( xarray_dataset.to_array() ),但这也使会话崩溃。

我的问题是,我应该如何使用 Dask 读取这个 17GB 的 GRIB 文件并计算数据集中每个 lon、lat 对的全年最高温度?

4

1 回答 1

3

xarrayhas -integration,在提供 kwargdask时激活chunks。以下应该避免将数据集加载到内存中的需要:

import xarray as xr

ds = xr.open_dataset("cds/2020_hourly_t2m.grib", engine="cfgrib", chunks="auto")

test_lazy = ds.max()  # this is lazy
test_result = test_lazy.compute()  # actual result

请注意.compute()ds.max(). 这是因为对块进行操作会产生惰性结果,只有在明确请求时才会计算,请参阅本教程

于 2022-01-03T06:02:56.030 回答