带有 dask sel 的 xarray 很慢
xarray with dask sel is slow
一系列大约 90 个 netCDF 文件,每个大约 27 MB,用 xarray 的 open_mfdataset 打开需要很长时间来加载一个小的 space 时间选择。
分块维度产生边际增益。 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 数组几乎没有空 spaces.
事实证明,文件数量太多,无法有效处理 dask。
这些文件具有纬度、经度和时间维度。在这种情况下,时间的 g运行 周期为 3 小时。我正在操作的时间尺度使我能够处理 ~35000 个文件。太多了,无法处理。我通过按年合并文件来解决这个问题,将 .nc 文件的数量减少到 12 个。
CDO(气候数据操作员)是一种实用程序,可让我们快速合并文件。看
[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() 表现得更好。
一系列大约 90 个 netCDF 文件,每个大约 27 MB,用 xarray 的 open_mfdataset 打开需要很长时间来加载一个小的 space 时间选择。
分块维度产生边际增益。 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 数组几乎没有空 spaces.
事实证明,文件数量太多,无法有效处理 dask。
这些文件具有纬度、经度和时间维度。在这种情况下,时间的 g运行 周期为 3 小时。我正在操作的时间尺度使我能够处理 ~35000 个文件。太多了,无法处理。我通过按年合并文件来解决这个问题,将 .nc 文件的数量减少到 12 个。
CDO(气候数据操作员)是一种实用程序,可让我们快速合并文件。看 [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() 表现得更好。