我有一个约 6000 行长的数据框。我需要将一个函数(我们称之为 heavy_func
)应用于特定列的所有行,每次调用最多需要一分钟。该函数的输入是一个字符串,输出是一个 np.array。
我正在使用dask分布式
来设置一个集群来执行应用程序。现在我使用 80 个工作线程,每个工作线程有 4 个核心和 8 GB RAM。
实际的应用步骤如下所示:
ddf = dd.from_pandas(df, npartitions=100)
ddf['new_col'] = ddf.apply(heavy_func, axis=1, meta=('ddf', 'object'))
df = ddf.compute()
我想知道如何最大限度地提高效率。
我应该最大化 worker 还是核心? nr 的比例应该是多少?分区数和编号。 worker /核心的数量是?
我也不确定使用 map_partitions
代替 apply
是否会有任何好处。
最佳答案
对于进程和线程,您可能需要阅读以下内容:https://docs.dask.org/en/latest/best-practices.html#processes-and-threads
这取决于你的计算释放了多少 GIL。
使用 apply 与 map_partitions 在这里应该没有太大区别。
关于python - 将计算密集型函数应用于 dask 数据帧的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57662346/