如何在dask中并行化groupby()?

时间:2019-04-09 19:39:01

标签: pandas parallel-processing pandas-groupby dask

我尝试过:

df.groupby('name').agg('count').compute(num_workers=1)
df.groupby('name').agg('count').compute(num_workers=4)

他们花费相同的时间,为什么num_workers不起作用?

谢谢

1 个答案:

答案 0 :(得分:0)

默认情况下,Dask将处理多线程任务,这意味着它将在您的计算机上使用单个处理器。 (请注意,如果您的数据无法容纳在内存中,使用dask仍然很有趣)

如果要使用多个处理器来计算操作,则必须使用其他调度程序:

from dask import dataframe as dd
from dask.distributed import LocalCluster, Client

df = dd.read_csv("data.csv")

def group(num_workers): 
    start = time.time() 
    res = df.groupby("name").agg("count").compute(num_workers=num_workers) 
    end = time.time() 
    return res, end-start

print(group(4))

clust = LocalCluster()
clt = Client(clust, set_as_default=True) 
print(group(4)) 

在这里,我使用4个并行进程创建本地集群(因为我有一个四核),然后设置默认的调度客户端,该客户端将使用此本地集群执行Dask操作。使用1.5 Gb的CSV两列文件,在我的笔记本电脑上,标准groupby大约需要35秒,而多进程的标准仅需要22秒。