70GB 数据连接操作的 dask 数据帧最佳分区大小

dask dataframe optimal partition size for 70GB data join operations

我有一个大约 70GB 的 dask 数据框和 3 列不适合内存。我的机器是 8 核 Xeon 和 64GB Ram 以及本地 Dask 集群。

我必须将 3 列中的每一列都取出来,并将它们连接到另一个更大的数据框。

The documentation 建议分区大小为 100MB。但是,鉴于这种数据大小,加入 700 个分区似乎比加入 70 个分区 1000MB 的工作要多得多。

是否有理由将其保持在 700 x 100MB 分区? 如果不是,应该在这里使用哪个分区大小? 这是否也取决于我使用的工人数量?

最佳分区大小取决于许多不同的因素,包括可用 RAM、您正在使用的线程数、您的数据集有多大,以及在许多情况下您正在进行的计算。

例如,在您的情况下,如果您的 join/merge 代码可能是您的数据高度重复,因此您的 100MB 分区可能会迅速扩展 100 倍至 10GB 分区,并迅速填满内存。或者他们可能不会;这取决于你的数据。另一方面,join/merge 代码确实会产生 n*log(n) 任务,因此减少任务数量(并因此增加分区大小)可能非常有利。

确定最佳分区大小具有挑战性。一般来说,我们能做的最好的事情就是提供关于正在发生的事情的洞察力。可在此处获取: