跳到主要内容
哒哒星球DADA PLANET

Skill · 已公开版本

dask · 用 Dask 分块处理超出内存的数据

将表格运算改为分区与延迟计算,评估本机或集群执行方式,处理单机内存难以容纳的数据。

先看看示例

作者提供的示例,实际效果取决于你的输入和使用工具。

输入

data/sales-*.csv 含 region,amount;文件总量超过本机内存,只需地区总额并保存结果。

输出

编辑示例 · 未运行

import dask.dataframe as dd
df = dd.read_csv("data/sales-*.csv", dtype={"region": "string", "amount": "float64"}, blocksize="64MB")
summary = df.groupby("region").amount.sum()
# 只有少量地区时才把聚合结果取回本机
small = summary.compute()
small.to_csv("region_summary.csv")
# 大规模明细输出应使用分区 to_parquet,避免 df.compute()。

方法说明

将表格运算改为分区与延迟计算,评估本机或集群执行方式,处理单机内存难以容纳的数据。

具体任务

分区汇总多份销售文件:将表格运算改为分区与延迟计算,评估本机或集群执行方式,处理单机内存难以容纳的数据。

并行处理独立文件:用 delayed 或分布式任务安排可并行计算,避免重复传输大对象和重复 compute。

必需材料

数据路径、格式和字段

计算目标与可用内存

可选材料

集群配置

云存储访问方式

使用门槛

任务可分区处理,了解哪些步骤会触发全量计算或 shuffle。

这个 Skill 额外提供的方法

将大数据读取、分区聚合和落盘组织成惰性任务,明确最容易溢出的步骤。

编辑示例(未运行)

分区汇总多份销售文件

任务:请根据下面的示例材料完成分区汇总多份销售文件,把判断依据和待确认事项写清楚。

输入:
data/sales-*.csv 含 region,amount;文件总量超过本机内存,只需地区总额并保存结果。

结果片段:
```python
import dask.dataframe as dd
df = dd.read_csv("data/sales-*.csv", dtype={"region": "string", "amount": "float64"}, blocksize="64MB")
summary = df.groupby("region").amount.sum()
# 只有少量地区时才把聚合结果取回本机
small = summary.compute()
small.to_csv("region_summary.csv")
# 大规模明细输出应使用分区 to_parquet,避免 df.compute()。
```

将大数据读取、分区聚合和落盘组织成惰性任务,明确最容易溢出的步骤。 该片段是编辑示例,用于说明交付形态,未运行上游技能。

首次任务

请使用「用 Dask 分块处理超出内存的数据」完成「分区汇总多份销售文件」。
任务要求:将大数据读取、分区聚合和落盘组织成惰性任务,明确最容易溢出的步骤。

我的必需材料:
- 数据路径、格式和字段:[请填写或粘贴]
- 计算目标与可用内存:[请填写或粘贴]

请基于上述实际材料输出:分区方案、Dask 计算代码与执行诊断。缺少依据的地方单列为待确认,不编造事实;未执行的操作或测试明确标为未执行。

验收要求:
1. 小样本结果与单机基线一致。
2. 分区规模和峰值内存在资源范围内。
3. 全量明细不被意外汇集到单机。

验收方法

小样本结果与单机基线一致

分区规模和峰值内存在资源范围内

全量明细不被意外汇集到单机

依赖与准备

固定来源以 Python 3.10+、Dask 2025.1+ 为基线;DataFrame 需 pandas 2+ 与 PyArrow 16+,云路径需对应文件系统库,集群另需 distributed。

使用边界

最终 collect/compute 到本机的结果仍须装得进内存。

云路径、集群启动和资源费用需账号权限与预算边界。

排错

分区很多反而更慢:检查任务调度开销与小文件数量,合并过小分区后再测。

运行后仍内存溢出:定位 shuffle、persist 或全量 compute,减少宽表与单分区数据量。

固定来源

https://github.com/K-Dense-AI/scientific-agent-skills/blob/065b734670d7d990627dbc06a05b5a99be33f1f1/skills/dask/SKILL.md