【问题标题】:Dask utilising all ram when saving to parquet保存到镶木地板时使用所有 ram
【发布时间】:2021-09-21 11:12:50
【问题描述】:

我在使用 dask 时遇到问题。与 pandas 相比,它非常慢,尤其是在读取高达 40gig 的大型数据集时。经过一些额外处理后,数据集增长到大约 100 多列,主要是 float64(这非常慢,尤其是当我这样调用计算时:output = df[["date", "permno"]].compute(scheduler='threading')

我认为即使令人沮丧,我也可以忍受延迟,但是当我尝试将数据保存到镶木地板时:df.to_parquet('my data frame', engine="fastparquet") 它在大约 110gig ram 的服务器中内存不足。我注意到当我执行free -h 时,缓冲区/缓存内存从大约 40 兆字节增加到 40 + gig。

鉴于 dask 不会将所有内容加载到内存中,我很困惑这怎么可能。我在 dask 中为数据集使用了 100 个分区。

【问题讨论】:

  • 数据从哪里来,你是怎么加载的?你在申请什么处理?您是否尝试过分布式调度程序或以其他方式查看任何诊断信息?
  • 数据来自wrds数据库,是财务数据,我们应用了很多groupby,做一些排序,最后与另一个数据集(compu stat和crsp)合并。我尝试了分布式调度程序(本地机器),它在 4gig 内存不足。它在我们使用的google虚拟机中不起作用。我查看了端口 8787 的状态,但除了在我的机器中运行 4gig 后内存不足之外,我无法诊断出任何其他问题。但是,我认为 dask 默认使用可用内核来并行处理数据?

标签: dask dask-dataframe


【解决方案1】:

Dask 计算是延迟执行的。底层操作直到最后一刻才真正执行。以下是我可以从您的问题/评论中收集到的信息:

  • 您读取了一个 40GB 的数据集
  • 您运行分组/排序
  • 您加入其他数据集
  • 您尝试写信给 Parquet

计算瓶颈不一定与 Parquet 编写部分有关。您的瓶颈可能在于分组、排序或加入。

您可能需要执行广播加入、策略性持久化或重新分区,鉴于提供的信息很难说。

【讨论】:

    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 2023-01-05
    • 2019-01-08
    • 1970-01-01
    相关资源
    最近更新 更多