Как решить проблемы, связанные с библиотекой HDF5, которая разбивалась при записи в файлы .n c с использованием библиотек xarray или netCDF4? - PullRequest
0 голосов
/ 13 апреля 2020

Я записывал некоторые переменные (80k, около 300, около 500) в файл .n c. Я пытался с xarray и netCDF4 в python. Но не удалось с ошибкой следующим образом. Я знаю, что эта переменная слишком велика (около 5 ГБ), но иногда 7 переменных (каждый 5 ГБ) можно записать в 7 .n c файлов (соответственно), тогда эта ошибка возникала, иногда, когда я хочу записать 1 var (5 ГБ) в один файл .n c, но эта ошибка произошла. Поэтому я сомневался, что эта ошибка не связана с размером файла? Этот новый var - результаты расчета этих 7 переменных. Так могут ли быть некоторые результаты NaN или что-то еще, связанное со значениями, вызывающими эту ошибку? Есть кто-нибудь, кто мог бы помочь мне, пожалуйста? Большое спасибо!

In [11]: run ERA5_nc.py
There are 25 HDF5 objects open!

Report: open objects on 72057594037927938
Segmentation fault (core dumped)

мой код указан ниже:

def save2NCfile_singleyear(var, var_name, lon, lat, time, year, time_str):
    #var_name: string of var
    nlat, nlon, ntime = len(lat), len(lon), len(time)
    pr = Dataset('./singleyear_2010/ERA5_'+var_name+'_hourly_CONUS_'+time_str+'.nc', 'w',format='NETCDF4')

    pr.createDimension('time', ntime)
    #pr.createDimension(var_name, ntime, nlat)
    pr.createDimension('latitude', nlat)
    pr.createDimension('longitude', nlon)

    ftime = pr.createVariable('time', 'f', ('time',))
    flat = pr.createVariable('latitude', 'f', ('latitude',))
    flon = pr.createVariable('longitude', 'f', ('longitude',))
    VAR = pr.createVariable(var_name, 'f', ('time', 'latitude', 'longitude'))

    ftime[:] = time
    flat[:] = lat
    flon[:] = lon
    VAR[:,:,:] = var
    pr.close()
    print(var_name+' '+' of year '+time_str+'save to .nc file!')
#using xarray
import xarray as xr
def xa_save2NCfile_singleyear(var, var_name, lon, lat, time, year, time_str):
    #var_name: string of var
    #nlat, nlon, ntime = len(lat), len(lon), len(time)
    #pr = Dataset('./singleyear_2010/ERA5_'+var_name+'_hourly_CONUS_'+time_str+'.nc', 'w',format='NETCDF4')

    ds = xr.Dataset({var_name: (('time', 'latitude', 'longitude'), var)},
                    coords={'time': time,
                            'latitude': lat,
                            'longitude': lon})
    ds.to_netcdf('./singleyear_2010/ERA5_'+var_name+'_hourly_CONUS_'+time_str+'.nc')
    ds.close()

    #pr.close()
    print(var_name+' '+' of year '+time_str+'save to .nc file!')
...