读取大约100兆字节的grb2文件需要5分钟,代码如下:
import cfgrib
datasets = cfgrib.open_datasets(grib_path, backend_kwargs={'indexpath': ''})
有没有什么方法或库可以让我更快地读取这些文件?
这实际上是一个令人讨厌的问题。对于12Mb Grib文件,读取单个字段需要19秒,而pynio需要0.02秒!超过900倍!
ps:palallel=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(NOADS(中的grid2文件:
filename = "gfswave.txxz.global.0p25.f000.grib2"
参数:组合风浪和涌浪的有效高度
parameter = "HTSGW_P0_L1_GLL0" # with pynio"
parameter = "swh" # corresponding parameter with cfgrib
您可以激活并行读取以提高读取速度:
import xarray
data = xarray.open_mfdataset(grib_path, engine='cfgrib', parallel=True)