读取grb2文件很慢
Posted
技术标签:
【中文标题】读取grb2文件很慢【英文标题】:Read grb2 files is very slow 【发布时间】:2021-02-17 21:49:51 【问题描述】:使用以下代码读取大约 100 兆字节的 grb2 文件需要 5 分钟:
import cfgrib
datasets = cfgrib.open_datasets(grib_path, backend_kwargs='indexpath': '')
有什么方法或库可以让我更快地阅读这些文件吗?
【问题讨论】:
尝试使用;xarray.open_dataset(grib_path, engine='cfgrib')
并分享您的文件,我们可以重现您的问题。并且 open_datasets 返回一个您不需要传递的所有子集的列表backend_kwargs='indexpath': ''
。
问题是 grib2 文件非常压缩且难以阅读
速度和你告诉我的功能一样
你们有适合 eccodes 的 grib 表吗?并将文件上传到云存储并分享链接。然后我会检查它有什么问题。
【参考方案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
【讨论】:
太棒了!!你能展示一个带有pynio的代码示例吗? @jay : 我添加了 pynio 和 cfgrib 代码的示例。【参考方案2】:您可以激活并行读取以提高读取速度:
import xarray
data = xarray.open_dataset(grib_path, engine='cfgrib', parallel=True)
【讨论】:
open_dataset() 得到了一个意外的关键字参数 'parallel'以上是关于读取grb2文件很慢的主要内容,如果未能解决你的问题,请参考以下文章
php读取csv文件时 用phpexcel很慢 用fgetcsv()函数中文乱码 请问还有啥excel库或函数方法来读csv文件吗