先看看示例
作者提供的示例,实际效果取决于你的输入和使用工具。
输入
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