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

Dataframe 用于70GB数据联接操作的dask数据帧最佳分区大小,dataframe,join,dask,dask-distributed,Dataframe,Join,Dask,Dask Distributed,我有一个大约70GB的dask数据帧和3列,无法放入内存。我的机器是一个8核Xeon,带有64GB的Ram和一个本地Dask集群 我必须将这3列中的每一列连接到另一个更大的数据帧 建议分区大小为100MB。然而,考虑到数据的大小,连接700个分区似乎比连接70个分区和1000MB的工作要多得多 是否有理由将其保持在700 x 100MB的分区? 如果不是,这里应该使用哪个分区大小? 这是否也取决于我使用的工人数量 1 x 50GB工作线程 2 x 25GB工作线程 3 x 17GB工作线程 最

我有一个大约70GB的dask数据帧和3列,无法放入内存。我的机器是一个8核Xeon,带有64GB的Ram和一个本地Dask集群

我必须将这3列中的每一列连接到另一个更大的数据帧

建议分区大小为100MB。然而,考虑到数据的大小,连接700个分区似乎比连接70个分区和1000MB的工作要多得多

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

  • 1 x 50GB工作线程
  • 2 x 25GB工作线程
  • 3 x 17GB工作线程

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

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

确定最佳分区大小是一项挑战。一般来说,我们所能做的最好的事情就是提供关于正在发生的事情的见解。可从以下网址获得:


谢谢你,马修。我得到了连接,但我必须在本地集群上减少到1个工作线程和1-2个线程,否则我总是会收到内存不足警告。我使用的分区大小为1GB,这似乎是可行的。作为一个用户,我必须对不同的分区大小进行反复试验,我希望dask能够分析我的计算图,然后向我提出一个最佳分区。我还有一个关于set_index()内存不足的问题,我将发表另一篇文章,希望您能给予帮助。谢谢