我正在尝试使用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
实际上,对于较大的问题实例,这种幼稚的实现似乎比普通的熊猫要慢。我怀疑执行速度慢与上述问题有关。
答案 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能够识别出未来是什么,并正确地为您提供价值。