使用Dask

时间:2017-11-11 21:11:07

标签: python pandas dataframe dask

我有大量的条目E和一个函数f: E --> pd.DataFrame。对于不同的输入,函数f的执行时间可能会发生很大变化。最后,所有DataFrame应该连接成一个DataFrame。

我想避免的情况是分区(为了示例,使用2个分区),意外地,所有快速功能执行都发生在分区1上,所有慢速执行都发生在分区2上,因此不能最佳地使用工人。

partition 1:
[==][==][==]

partition 2:
[============][=============][===============]

--------------------time--------------------->

我目前的解决方案是迭代条目集合并使用delayed创建Dask图表,在最终结果DataFrame中汇总延迟的部分DataFrame结果dd.from_delayed

delayed_dfs = []  

for e in collection:
    delayed_partial_df = delayed(f)(e, arg2, ...)

    delayed_dfs.append(delayed_partial_df)

result_df = from_delayed(delayed_dfs, meta=make_meta({..}))

我推断Dask调度程序会将工作分配给可用的工作人员。

  1. 这是一个正确的假设吗?
  2. 你认为整体方法合理吗?

1 个答案:

答案 0 :(得分:1)

如上面的评论所述,是的,你所做的是明智的。

这些任务最初将分配给工人,但如果一些工人在其他人之前完成分配的任务,那么他们将动态地从那些工作过剩的工人那里窃取任务。

同样如评论中所述,您可以考虑使用诊断仪表板来充分了解调度程序正在执行的操作。所有关于工人负荷,偷工作等信息都很容易看到。

http://distributed.readthedocs.io/en/latest/web.html