Чтение файлов grb2 происходит очень медленно
Чтение файла grb2 размером около 100 мегабайт занимает у меня 5 минут со следующим кодом:
import cfgrib
datasets = cfgrib.open_datasets(grib_path, backend_kwargs={'indexpath': ''})
Есть ли способ или библиотека, с помощью которых я могу быстрее читать эти файлы?
2 ответа
на самом деле это раздражающая проблема, которая поднимается здесь. С 12-мегабайтным файлом Grib чтение одного поля cfgrib занимает 19 секунд по сравнению с 0,02 секунды с помощью pynio! более чем в 900 раз больше!
ps: parallel = True дает результат: open_dataset() получил неожиданный аргумент ключевого слова «parallel»
Код с пинио:
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))
Например, если вы попытаетесь использовать файл grib2 из GFS-wave (NOMADS):
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_dataset(grib_path, engine='cfgrib', parallel=True)