读取和处理大型 GRIB 文件

计算科学 Python 模拟 r
2021-12-22 16:20:08

我正在尝试将 GrADS (grib) 文件转换和处理为 netcdf 文件。这些文件每 3 小时有一次值(每年 2890 个)、12 个 z 级别、120 个变量、241 列和 236 行。数据几乎是每年 80 GB,我总共要处理 50 年。

在转换为 netcdf 之前,我试图计算变量子集的每日平均值和总和。到目前为止,我已经尝试过使用 GrADS,但我仍然无法使脚本正常工作。通过 GrADS 用户论坛查找类似任务的一些示例,我觉得 GrADS 不像几年前那样常用,所以我很好奇人们在处理数据时现在使用什么像这些一样大(我来自GIS背景,所以我不习惯这么大的数据)。

首先,我会说由于 RAM 限制,我将无法使用 R 或 Python,关系数据库选项也是一个问题,因为无法找到从 grib 导入 SQL 表的工具。对于这样一个“简单”的任务,我还有什么其他选择?

2个回答

我建议cdoCDO 可以读取 GRIB 文件(虽然我认为它只支持 GRIB2 文件)并且有许多计算方式、子集、重新网格化等选项。如果您也添加该-f nc选项,它将自动输出到 NetCDF。

ECMWF 的ecCodes 库可能也会派上用场。

我通常结合使用 CDO 和 ecCodes。例如,如果我想处理一个包含来自仅包含一个时间步长的气候模型的全球气象场的 GRIB 文件,我将使用以下内容:

# This ecCodes command splits the GRIB file "model_output+000000" into different
# vertical levels. In this case, the file only contains one kind of vertical level
# - pressure (hPa), but it could conceivably contain output on sigma levels, hybrid
# sigma coordinates, altitude etc. The "+000000" refers to the timestep contained
# in this file (the zeroth timestep).
grib_copy model_output+000000 model_output+000000_[typeOfLevel]

# The "*_isobaricInhPa" file was created by the previous command.
cdo -f nc setgridtype,regular model_output+000000_isobaricInhPa model_output+000000.nc

看起来 wgrib2 可以将数据转换为 csv 格式。

http://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/csv.html

一旦它是 csv,您就有多种选择。

任何 etl 工具都可以引入 csv 来进行计算。鉴于我在 Talend 工作,我会使用 Talend Studio。

澳大利亚海洋数据网络有一套用于 netcdf 的 Talend 例程。我没有尝试过,但这似乎值得一试。https://github.com/aodn