1

使用以下代码读取大约 100 兆字节的 grb2 文件需要 5 分钟:

import cfgrib
datasets = cfgrib.open_datasets(grib_path, backend_kwargs={'indexpath': ''})

有什么方法或库可以让我更快地阅读这些文件吗?

4

2 回答 2

1

这实际上是这里提出的一个烦人的问题。使用 12Mb Grib 文件,读取单个字段,cfgrib 需要 19 秒,而使用 pynio 需要 0.02 秒!超过900倍!

ps:parallel = True 结果:open_dataset() 得到了一个意外的关键字参数“parallel”

带有 pynio 的代码:

    import time
    import Nio
    import xarray as xr
    start = time.time()

    filename  = "full_path_to_the_grb2_file"
    parameter = "parameter_name"
    ds  = xr.open_dataset(filename, engine="pynio")
    var = ds.get(parameter)
    end = time.time()
    print("Elapsed time = ", round(end-start,5))

带有 cfgrib 的代码:

    import time
    import cfgrib
    import xarray as xr
    start = time.time()

    filename  = "full_path_to_the_grb2_file"
    parameter = "parameter_name"
    start = time.time()
    ds = xr.open_dataset(filename, engine="cfgrib", backend_kwargs={"indexpath":""}) 
    var = ds.get(parameter)
    end = time.time()
    print("Elapsed time = ", round(end-start,5))

例如,如果您尝试使用 GFS-wave (NOMADS) 中的 grib2 文件:

    filename = "gfswave.txxz.global.0p25.f000.grib2"

对于参数:组合风浪和涌浪的显着高度

    parameter = "HTSGW_P0_L1_GLL0"  # with pynio"
    parameter = "swh"               # corresponding parameter with cfgrib 
于 2021-11-23T17:37:20.527 回答
-1

您可以激活并行读取以提高读取速度:

import xarray
data = xarray.open_dataset(grib_path, engine='cfgrib', parallel=True)
于 2020-11-17T10:03:21.527 回答