在从.nc函数中访问全局dask.dataframe.map_partitions文件时,我确实遇到了性能问题。
一些背景:我有一大组netCDF文件,其中的值被映射到lat+lon值。对于每个val+lat+lon行,我想要计算到海岸值的距离。
由于所有数据集都不能同时进入内存,所以我考虑使用dask.dataframe (ddf)。我已经生成了ddf并希望现在添加dist2coast列。这是我的伪代码:
def get_dist2coast(latarr, lonarr, do_interp=True, cfilepath='~/data/dist2coast/dist2coast_1deg.nc'):
""" Calculates distance to coast."""
#
# access global/common dist2coast_1deg.nc file
# e.g.:
#
# ds = xr.open_dataset('~/data/dist2coast/dist2coast_1deg_merged.nc')
# return d2c_vec based on lat+lon values
ddf = ddf.map_partitions(lambda df: df.assign(dist2coast=get_dist2coast(df.lat, df.lon, do_interp=False)))这段代码大约需要20几个。如果我工作在记忆中的熊猫数据,它需要大约7。
我的第一个猜测是,不好的性能来自调用get_dist2coast的各个线程之间的某种锁定行为。dist2coast_1deg_merged.nc包括lat/lon网格上的距离到海岸的值。
为此,我并不真正依赖于dask性能优化。但是,在以后的处理步骤中,我肯定会从中受益。
你认为如何?有什么办法可以避免这种锁定行为吗?
发布于 2019-06-21 10:36:58
这段代码大约需要20几个。如果我工作在记忆中的熊猫数据,它需要大约7。
如果你能让潘达斯为你工作,那几乎总是一个更好的选择。
https://docs.dask.org/en/latest/best-practices.html#start-small
我的第一个猜测是,不好的性能来自调用get_dist2coast的各个线程之间的某种锁定行为。dist2coast_1deg_merged.nc包括lat/lon网格上的距离到海岸的值。
也许吧。我建议对您的代码进行分析,以查看什么是缓慢的。学习这可能会帮助你走向良好的表现。
https://docs.dask.org/en/latest/understanding-performance.html
https://stackoverflow.com/questions/56650449
复制相似问题