Xarray / Dask - 计算每个坐标的最高温度
Xarray / Dask - Compute the highest temperature for every coordinate
我有一个 17GB 的 GRIB 文件,其中包含 2020 年每小时的温度 (t2m) 数据。数据集的维度是 longitude
、latitude
和 time
.
我的目标是计算全年数据中每个坐标 (lon,lat) 的最高温度。我可以使用 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 文件,并计算数据集中每个经纬度对的全年最高温度?
xarray
具有 dask
-集成,当提供 chunks
kwarg 时激活。以下应该避免将数据集加载到内存中的需要:
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
请注意 ds.max()
上对 .compute()
的要求。这是因为对块进行操作会产生惰性结果,只有在明确请求时才会计算这些结果,请参阅 this tutorial.
我有一个 17GB 的 GRIB 文件,其中包含 2020 年每小时的温度 (t2m) 数据。数据集的维度是 longitude
、latitude
和 time
.
我的目标是计算全年数据中每个坐标 (lon,lat) 的最高温度。我可以使用 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 文件,并计算数据集中每个经纬度对的全年最高温度?
xarray
具有 dask
-集成,当提供 chunks
kwarg 时激活。以下应该避免将数据集加载到内存中的需要:
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
请注意 ds.max()
上对 .compute()
的要求。这是因为对块进行操作会产生惰性结果,只有在明确请求时才会计算这些结果,请参阅 this tutorial.