python - 将计算密集型函数应用于 dask 数据帧的最有效方法?

标签 python dataframe dask dask-distributed

我有一个约 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/

相关文章:

python-3.x - Dask 使用 future 计算子图

python - 使用 dask 阵列去除坏像素

DASK - 在执行期间停止工作人员会导致完成的任务启动两次

python - 在 Windows 10 上安装 64 位 PyCharm

r - 展开 R data.frame 列表列,保留行中的其他值

python - 尝试将 df1 中的每一行与 df1 中的多个其他行进行匹配

Pandas 为每行获取上下栅栏

python - 仅在特定目录中使用 os.system()

python - pymongo MongoClient end_request() 不会终止游标

python - Conda 尝试将大型默认库安装到新环境中