dask - 将 Dask/XArray 写入 NetCDF - 并行 IO
问题描述
我在 HPC 系统的分布式集群上使用 Dask/Xarray 和 ~150 GB 数据集。我已经完成了计算组件,大约需要 30 分钟。我想将最终结果保存到 NETCDF4 文件,但是将数据写入 NETCDF 文件非常慢(约 3 小时),而且似乎不能并行运行。我不清楚 Xarray 中的“to_netcdf”函数是否应该支持并行写入。目前我的方法是用 NetCDF4 编写一个空的 netcdf 文件,然后附加 Xarray 中的数据:
f_mosaic = 't1.nc'
meta = {'width': dat_f.shape[1],
'height': dat_f.shape[2],
'crs': rasterio.crs.CRS(init='epsg:'+fi['CPER']['Reflectance']['Metadata']['Coordinate_System']['EPSG Code'].value.decode("utf-8")),
'transform': aff_final,
'count': dat_f.shape[0]}
with netCDF4.Dataset(f_mosaic, mode='w', format="NETCDF4") as t1:
# Create spatial dimensions
y = t1.createDimension('y', meta['width'])
x = t1.createDimension('x', meta['height'])
wl_dim = t1.createDimension('wl',meta['count'])
reflectance = t1.createVariable("reflectance","int16",("wl","y","x",),fill_value=null_val,zlib=True)
reflectance.setncattr('grid_mapping', 'crs')
crs = t1.createVariable('crs', 'c')
crs.spatial_ref = meta['crs'].wkt
crs.epsg_code = meta['crs'].to_string()
crs.GeoTransform = " ".join(str(x) for x in meta['transform'].to_gdal())
dat_f.to_netcdf(path=f_mosaic,mode='a',format='NETCDF4',encoding={'reflectance':{'zlib':True}})
总的来说,问题是,如何快速将这些数据写入 NETCDF4 文件?dask/Xarray 是否支持 NETCDF4 的并行写入?如果是这样,我做错了什么?
谢谢!
解决方案
推荐阅读
- python - 将随机变量传递给 agg 函数 python
- c - 如何在 execl() 函数中更改时区(TZ=UTC)输出。
- php - 考试 Qn:将 do while 循环转换为 for 循环 (PHP)
- ssis - SSIS ADO.Net 连接器火灾触发器
- javascript - 在 Postman 的 URL 中传递全局变量
- angular - 如何将 Mat-Card 组件中的内容居中 - Angular 6
- php - 在 PHP 7.2 上使用 Symfony 会话的 `migrate` 方法会引发错误
- proguard - Proguard:使用具有特定注释的 main() 混淆类
- sql - 如何从列列表中进行选择?SQL 服务器
- python - 无法正确转换 OBJ 或 OpenGL 无法很好地绘制对象