首页 > 解决方案 > 使用 dask 合并大型数据集

问题描述

我有两个数据集,一个大约 45GB,包含 1 年的每日交易,第二个是 3.6GB,包含客户 ID 和详细信息。我想将两者合并到一个公共列上以创建一个数据集,该数据集超出了服务器的内存,因为每个客户可能有多个事务。我正在使用具有 16 个内核和 64GB RAM 的 Windows 服务器,据我所知,这种工作的规格非常有限。

方法

将大数据集读入 dask 数据帧并将索引设置为客户 ID。在 pandas 中读取 3.6GB 数据集,并将索引设置为客户 ID。使用参数 memory_limit='50GB' 和 processes=False 启动本地集群。将 dask 数据帧与索引上的 pandas 数据帧合并(left_index=True,right_index=True)。

这种方法创建了 75000 个任务,最终会炸毁内存。

我想要完成的事情可能吗?我是否为此选择了错误的工具?我的想法不多了,我迫切需要一些帮助。

标签: pandasdasklarge-data

解决方案


是的,您想做的事情是可能的,但您可能需要稍微调整一下分区大小。如果您的数据中有很多重复,那么 Pandas 可能会突然产生非常大的值。您可以通过...解决此问题

  1. 使用较小的分区(也许)
  2. 减少并行量(也许试试看dask.config.set(scheduler="single-threaded")是否有帮助

推荐阅读