计算图表期间无法进行快速广播

时间:2019-05-10 20:37:59

标签: python pandas dask dask-distributed

我正在尝试使用Dask,并希望将查找pandas.DataFrame发送给所有工作节点。不幸的是,它失败了:

TypeError: ("'Future' object is not subscriptable", 'occurred at index 0')

当使用lookup['baz'].iloc[2]代替lookup.result()['foo'].iloc[2]时,它可以正常工作,但是:对于输入数据帧的较大实例,它似乎一次又一次地停留在from_pandas上。另外,似乎很奇怪,将来需要手动阻止(在apply操作的每一行中重复一遍。是否有一种方法可以对每个工作节点仅一次阻止将来?天真的改进可以使用{{ 1}},但这仅在分区数量相当少的情况下才可行。

map_partitions

实际上,对于较大的问题实例,这种幼稚的实现似乎比普通的熊猫要慢。我怀疑执行速度慢与上述问题有关。

1 个答案:

答案 0 :(得分:1)

代替此:

df_second_dask['foo'] = df_second_dask.apply(lambda x: foo(x, df_first_scattered), axis = 1, meta=('baz', 'int64'))

尝试以下方法:

df_second_dask['foo'] = df_second_dask.apply(foo, args=[df_first_scattered], axis = 1, meta=('baz', 'int64'))

以前,您将未来隐藏在lambda函数中。 Dask无法找到它以将其转换为适当的值。相反,当我们将未来作为正确的论据传递时,Dask能够识别出未来是什么,并正确地为您提供价值。