【问题标题】:How does dask work for larger than memory datasetsdask 如何处理大于内存的数据集
【发布时间】:2019-02-23 08:49:30
【问题描述】:

谁能简单地告诉我dask 如何适用于大于内存的数据集。例如,我有一个 6GB 和 4GB RAM 的数据集,有 2 个内核。 dask 将如何加载数据并进行简单的计算,例如列的总和。

dask 是否自动检查内存大小并将数据集分块为小于内存块。然后,一旦被请求计算,将一个块一个块地带入内存并使用每个可用内核进行计算。我说的对吗?

谢谢

迈克尔

【问题讨论】:

    标签: python dask


    【解决方案1】:

    “数据集”显然是指数据框。让我们考虑一下您可能要从中加载的两种文件格式:CSV 和 parquet。

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

    • 对于 parquet,格式本身具有数据的内部分块,Dask 将利用此模式加载数据

    在这两种情况下,每个工作人员将一次加载一个块,并计算您要求的列总和。然后,加载的数据将被丢弃,为下一个腾出空间,只将求和的结果保存在内存中(每个分区一个数字)。如果您有两个工人,两个分区将在内存中并同时处理。最后,所有的总和相加。

    因此,每个分区都应该可以轻松地放入内存中 - 不要太大 - 但是加载和处理每个分区所花费的时间应该比调度任务在工作人员上运行所带来的开销要长得多(后者

    【讨论】:

    • 好的。感谢您的详细说明。
    • 你会说这回答了你的问题吗?如果您对如何使文档更清晰有任何建议,请在问题跟踪器上发布。
    猜你喜欢
    • 2016-07-16
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 2018-01-13
    • 2014-08-09
    相关资源
    最近更新 更多