【问题标题】:How do Dask dataframes handle larger-than-memory datasets?Dask 数据帧如何处理大于内存的数据集?
【发布时间】:2016-07-16 03:10:59
【问题描述】:

documentation of the Dask package for dataframes 说:

Dask 数据帧的外观和感觉类似于 pandas 数据帧,但在操作上 使用多线程的大于内存的数据集。

但稍后在同一页面中:

一个 dask DataFrame 由多个内存中的 pandas DataFrames 组成 沿索引分隔。

Dask 是否按顺序从磁盘读取不同的 DataFrame 分区并执行计算以适应内存?它会在需要时将一些分区溢出到磁盘吗?一般来说,Dask 是如何管理内存 数据的磁盘 IO 来实现大于内存的数据分析的?

我尝试在 10M MovieLens 数据集上执行一些基本计算(例如平均评分),我的笔记本电脑(8GB RAM)开始交换。

【问题讨论】:

  • 你可以考虑一个更详细的问题,关于你的电影镜头问题。
  • 显然我的电影镜头问题是由 sep '::' 被 Pandas 解释为正则表达式引起的。 sed-ed 到 ';'现在它可以毫无问题地加载到主内存中。

标签: python dask bigdata


【解决方案1】:

Dask.dataframe 会延迟加载数据并尝试在一次线性扫描中通过数据集执行整个计算。令人惊讶的是,这通常是可行的。

智能转储到磁盘也是它可以管理的一个选项,尤其是在需要随机播放时,但通常有办法解决这个问题。

【讨论】:

  • 谢谢。你知道我可以在哪里找到有关 Dask 究竟如何管理磁盘/内存 io 的文档吗?官方文档并没有说得很清楚。
  • @dukebody 有点晚了,但这里是:D stackoverflow.com/questions/36269461/…
【解决方案2】:

我碰巧在 2 年后来到这个页面,现在有一个简单的选项可以限制每个工作人员的内存使用量。认为在此线程处于非活动状态后,@MRocklin 已将其包含在内。

$ dask-worker tcp://scheduler:port --memory-limit=auto  # total available RAM on the machine
$ dask-worker tcp://scheduler:port --memory-limit=4e9  # four gigabytes per worker process.

此功能称为 Spill-to-disk 工作人员政策,详细信息可在文档中找到 here

显然,额外的数据将溢出到以下命令指定的目录:

$ dask-worker tcp://scheduler:port --memory-limit 4e9 --local-directory /scratch 

该数据仍然可用,必要时会从磁盘读回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    相关资源
    最近更新 更多