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

标签 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 不起作用?

谢谢

最佳答案

默认情况下,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 秒。

关于pandas - 如何在 dask 中并行化 groupby()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55600130/

相关文章:

python - Pandas 散点图中的刻度标签未正确绘制

python - Pandas - 添加虚拟行,其中包含 Pandas.Series 之间的一些值

r - 带plyr的多核,MC

python - 数据帧的每 2 小时数据分组

python-3.x - 如何从 Pandas 数据框中的组中获取行的子集?

Python Pandas 从列中删除非数字行

pandas - 附加列表作为数据框行

R 在 HPC MPIcluster 上运行 foreach dopar 循环

ffmpeg - 使用 ffmpeg 并行递归转换文件

python - 使用基于另一列的 groupby 的最小最大标准化来标准化数据帧的列