猿问

带有 dask sel 的 xarray 很慢

一系列大约 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 阵列几乎没有空格。


慕桂英546537
浏览 381回答 1
1回答

千巷猫影

事实证明,文件数量太多,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.nccdo cat ./precip/2004/*.nc4 2004.nc从那里开始, xr.open_mfdataset() 表现得更好。
随时随地看视频慕课网APP

相关分类

Python
我要回答