数据帧的最佳分区大小,适用于70GB数据联接操作

时间:2019-11-30 23:47:41

标签: dataframe join dask dask-distributed

我有一个大约70GB的dask数据帧和3个无法容纳到内存中的列。我的机器是8 CORE Xeon,具有64GB的Ram和本地的Dask Cluster。

我必须将3列中的每列都包含在另一个更大的数据框中。

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

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

  • 1 x 50GB工作人员
  • 2 x 25GB工作人员
  • 3 x 17GB工作人员

1 个答案:

答案 0 :(得分:1)

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

例如,在您的情况下,如果您的联接/合并代码可能是您的数据具有高度重复性,那么您的100MB分区可能会迅速扩展到100x到10GB分区,并迅速填满内存。否则他们可能不会;这取决于您的数据。另一方面,联接/合并代码确实会产生n*log(n)个任务,因此减少任务数量(并因此增加分区大小)会非常有利。

确定最佳分区大小具有挑战性。通常,我们能做的最好的就是提供有关正在发生的事情的见解。在这里可用: