为了账号安全,请及时绑定邮箱和手机立即绑定

带有 dask sel 的 xarray 很慢

带有 dask sel 的 xarray 很慢

慕桂英546537 2022-01-18 13:44:35
一系列大约 90 个 netCDF 文件,每个文件大约 27 MB,使用 xarray 的 open_mfdataset 打开需要很长时间才能加载一个小的时空选择。分块维度产生边际收益。decode_cf=True 无论是在函数内部还是单独的也没有区别。这里的另一个建议https://groups.google.com/forum/#!topic/xarray/11lDGSeza78让我将选择保存为单独的 netCdf 并重新加载。当 dask 部分必须做一些工作(加载、计算、转换为 pandas 数据帧)时,它似乎成为瓶颈。使用 dask.visualize 生成图形会生成一个巨大的图像。它可能告诉我们一些事情,但我不确定如何解释。wind = xr.open_mfdataset(testCCMPPath,\                         decode_cf=True,\                         chunks={'time': 100,\                                 'latitude': 100,\                                 'longitude': 100})%timeit wind.sel(latitude=latRange, longitude=windLonRange, time=windDateQueryRange).load()wxr = wind.sel(latitude=latRange, longitude=windLonRange, time=windDateQueryRange)df = wxr.to_dataframe()print(df.shape)timeit 输出显示每个循环 1.93 秒 ± 29.8 毫秒(平均值 ± 标准偏差。7 次运行,每个循环 1 个)df.shape 输出只有 164x3。对于另一个 xr 数组,我有一个类似的 sel,并且得到的时间约为 0.05 秒,但是这有很多稀疏点。wind xr 阵列几乎没有空格。
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

事实证明,文件数量太多,dask 无法有效处理。

这些文件具有纬度、经度和时间维度。在这种情况下,时间的粒度为 3 小时。我正在操作的时间尺度使得我正在处理大约 35000 个文件。太多的dask处理。我通过按年合并文件来解决这个问题,将 .nc 文件的数量减少到 12 个。

CDO (Climate Data Operators) 是一个让我们快速合并文件的实用程序。有关详细信息,请参阅 [ https://www.unidata.ucar.edu/software/netcdf/software.html#CDO][1] 。

我如何使用 cdo 的示例:对于目录 ./precip/2004 中的一组文件,我运行 shell 命令来创建一个连接的 netCDF 文件 2004.nc

cdo cat ./precip/2004/*.nc4 2004.nc

从那里开始, xr.open_mfdataset() 表现得更好。



查看完整回答
反对 回复 2022-01-18
  • 1 回答
  • 0 关注
  • 380 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信