2

我有一个向我返回数据框的函数。我正在尝试通过使用 dask 来并行使用此功能。
我将数据帧的延迟对象附加到列表中。但是,我的代码的运行时间在有和没有 dask.delayed 的情况下是相同的。
我使用 functools 中的 reduce 函数pd.merge来合并我的数据框。
关于如何提高运行时的任何建议?
可视化图表和代码如下。

from functools import reduce 
d = []
for lot in lots:
    lot_data = data[data["LOTID"]==lot]
    trmat = delayed(LOT)(lot, lot_data).transition_matrix(lot)
    d.append(trmat)
df = delayed(reduce)(lambda x, y: x.merge(y, how='outer', on=['from', "to"]), d)

操作的可视化图表

4

1 回答 1

0

一般规则:如果您的数据适合内存(包括基本大小乘以可能的中间值的一小部分),那么 Pandas 很有可能对您的用例来说是快速且高效的。

特别是对于您的情况,您尝试并行化的任务很有可能不会释放 python 的内部锁 GIL,在这种情况下,尽管您有独立的线程,但一次只能运行一个。解决方案是改用“分布式”调度程序,它可以混合多个线程并进行处理;但是,使用进程需要在客户端和进程之间移动数据的成本,并且您可能会发现额外的成本在任何时间节省中占主导地位。您当然希望确保在工作人员中加载数据,而不是从客户端传递数据。

小故事,你应该做一些实验,好好衡量,并仔细阅读数据框架和分布式调度器文档。

于 2018-11-18T15:49:32.280 回答