适用于dask的最佳并发/分区应用?

时间:2018-07-29 11:16:39

标签: dask

我正在数据框列上使用apply (希望我不应该使用apply_map,文档尚不清楚)。我想充分利用闲置的多核大内存计算机。

我是否使用工作程序,线程和分区数量的最佳组合?

client = Client(n_workers=cpu_count()-2, threads_per_worker=1, memory_limit='1GB')

ddf = daskDataFrame.from_pandas(df, npartitions=cpu_count()-2)

ddf['candidate'] = ddf['text'].apply(get_sameness_candidate, meta=('candidate', 'str'))

我应该看看我要为自己回答这个问题而申请的功能,还是对这种情况的调整不可知,因此我们有一条经验法则?

谢谢!

1 个答案:

答案 0 :(得分:1)

恐怕,知道给定并行计算的最佳设置的唯一方法是基准测试。许多变量会影响性能:数据量和单个块的大小,计算的复杂性,它需要多少CPU以及函数中的中间件需要多少内存,函数是否释放GIL,工人之间需要很多沟通...

您正在使用from_pandas的事实表明,为了使Dask受益匪浅,您的计算将需要占用大量CPU资源,因为显然它必须作为单个熊猫数据帧容纳在客户端计算机的内存中。

一些建议是here,并且分布式仪表板将向您显示正在发生的事情,包括提交的图形的当前状态和在工作程序上运行的代码概要分析。这将回答评论中的问题;您不会获得 行级别的信息,因为Dask先验地不知道数据帧的每个分区中有多少行。