dask如何处理大于内存的数据集

时间:2019-02-23 08:49:30

标签: python dask

用简单的术语,谁能告诉我dask对于大于内存数据集的工作方式。例如,我有一个具有2个核心的6GB和4GB RAM的数据集。如何轻松地加载数据并进行简单的计算(例如列总和)。

自动自动检查内存的大小并将数据集分块成小于内存块的大小。然后,一旦被请求进行计算,就将一块接一块地放入内存中,并使用每个可用内核进行计算。我对吗?

谢谢

迈克尔

1 个答案:

答案 0 :(得分:1)

通过“数据集”,您显然是指一个数据框。让我们考虑一下您可能要加载的两种文件格式:CSV和镶木地板。

  • 对于CSV,文件中没有固有的分块机制,因此用户(用户)可以使用dd.read_csv(path, blocksize=..)选择适合您的应用程序的每块字节数,或者允许Dask尝试做一个体面的猜测; “ 100MB”可能是个不错的选择。

  • 对于镶木地板,格式本身具有数据的内部分块,Dask将在加载数据时使用此模式

在两种情况下,每个工作程序将一次加载一个块,并计算您要的列总和。然后,将丢弃已加载的数据以为下一个分配空间,仅将总和的结果保留在内存中(每个分区为单个数字)。如果您有两个工作线程,则两个分区将在内存中并同时处理。最后,将所有的总和加在一起。

因此,每个分区应该舒适地适合内存-不会太大-但加载和处理每个分区所需的时间应比安排任务在工作者上运行所施加的开销要长得多(后者<1ms )-不能太小。