我有一大堆条目E和一个函数f:E --> pd.DataFrame
。函数f的执行时间对于不同的输入可能会有很大差异。最后所有的DataFrame都应该被连接成一个单独的DataFrame。
我想要避免的情况是,如果分区(为了举例,使用2个分区)中偶然地所有快速函数执行发生在分区1中,而所有缓慢的执行发生在分区2中,这样就无法最优地利用工人。
partition 1:
[==][==][==]
partition 2:
[============][=============][===============]
--------------------time--------------------->
我的当前解决方案是遍历条目集合并使用 delayed
创建一个Dask图,使用 dd.from_delayed
将延迟的部分DataFrame结果聚合到最终结果DataFrame中。
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调度程序会负责将工作最优地分配给可用的工作者。
- 这个假设正确吗?
- 您是否认为整体方法是合理的?