Dask 是一个用于并行与分布式计算的 Python 库,提供三项关键能力:在单台机器上对超出可用内存的数据执行超内存计算;跨多个核心进行并行处理以提升计算速度;支持跨多台机器处理 TB 级数据集的分布式计算。Dask 可从笔记本(处理约 100 GiB)扩展到集群(处理约 100 TiB),同时保持熟悉的 Python API。
当前上游版本为 dask 2026.3.0(PyPI,2026 年 3 月),文档位于 docs.dask.org。自 2025.1.0 起,基于表达式的 DataFrame API 与查询规划是唯一实现,不要单独安装 dask-expr,也不要设置 dataframe.query-planning: False。
安装方式:
- 基础安装:uv pip install "dask>=2025.1"
- 典型 pandas/NumPy 工作流(含分布式调度器和仪表盘):uv pip install "dask[complete]"
- 远程对象存储:uv pip install s3fs(s3:// 路径)、uv pip install gcsfs(gs:// 路径)
环境要求:Python 3.10+(3.9 支持已在 2024.12 移除)。DataFrame I/O 需要 PyArrow 16+(自 dask 2026.1.2 起)。
适用场景:处理超出可用 RAM 的数据集;将 pandas 或 NumPy 操作扩展到更大数据集;并行化计算以提升性能;高效处理多个文件(CSV、Parquet、JSON、文本日志);构建带任务依赖的自定义并行工作流;将工作负载分布到多个核心或机器。
核心能力与最佳实践详见参考文件 references/core-capabilities.md 和 references/best-practices.md。关键性能规则包括:不要先在本地加载数据再交给 Dask(应使用 dd.read_csv 等直接读取);避免重复调用 compute()(应使用 dask.compute(*computations) 一次性计算);不要构建过大的任务图(可增大分块、使用 map_partitions/map_blocks 融合操作,并用 len(ddf.dask_graph()) 检查任务图大小);选择合适的分块大小(目标约每块 100 MB,或每个核心 10 块);使用仪表盘监控性能(from dask.distributed import Client; client = Client(); print(client.dashboard_link))。
常见工作流模式包括:ETL 管道(用 dd.read_csv 读取、过滤转换、groupby 聚合并 to_parquet 保存);非结构化到结构化管道(用 dask.bag 读取文本/JSON,过滤后 to_dataframe 转换再分析);大规模数组计算(用 dask.array 从 Zarr 加载、分块处理、to_zarr 保存);自定义并行工作流(用 Client.scatter 分发大数据集,client.submit 提交任务,client.gather 收集结果)。
选择组件时可参考:表格数据用 DataFrames,数值数组用 Arrays,文本/JSON/日志用 Bags(再转 DataFrame),自定义 Python 对象用 Bags 或 Futures;标准 pandas 操作用 DataFrames,标准 NumPy 操作用 Arrays,自定义并行任务用 Futures,文本处理/ETL 用 Bags;高层自动用 DataFrames/Arrays,底层手动用 Futures;静态计算图用 DataFrames/Arrays/Bags,动态演化用 Futures。
文件格式方面:高效格式为 Parquet、HDF5、Zarr(列式、压缩、并行友好);CSV 兼容但较慢,仅用于初始摄取。数组适用 HDF5、Zarr、NetCDF。集合之间可转换:bag.to_dataframe()、ddf.to_dask_array(lengths=True)、dd.from_dask_array(arr, columns=[...])。与其他库集成:XArray 用带标签维度包装 Dask 数组(地理空间、成像),Dask-ML 提供与 scikit-learn 兼容的机器学习 API,Distributed 提供高级集群管理与监控。
调试与开发建议:先用同步调度器在小数据上测试(dask.config.set(scheduler='synchronous')),再用线程在样本上验证(ddf.head(1000)),最后用分布式调度器扩展并监控。常见问题:内存错误可减小分块、策略性使用 persist() 并及时删除、检查自定义函数内存泄漏;启动慢可能是任务图过大(增大分块)或使用 map_partitions/map_blocks 减少任务;并行化差可能是分块过大(增加分区数)、Python 代码使用线程(改用进程)或数据依赖阻碍并行。
参考文件包括:references/dataframes.md、references/arrays.md、references/bags.md、references/futures.md、references/schedulers.md、references/best-practices.md,可按需加载获取详细指导。
代理操作流程:检查环境(确认 Python 环境与库版本,检查数据形状、类型与缺失值);明确输入(确认格式、标识符与参数,不确定时询问而非猜测);先运行小版本(在样本或单折上运行,检查运行时间与内存);执行完整任务;验证结果(使用留出数据、固定随机种子与合适指标,检查泄漏,报告不确定性);报告(说明运行内容、检查内容与仍不确定之处)。若出现内存不足或执行缓慢,可子采样、使用分块或惰性计算、减小模型规模,并告知用户变更。若指令中的函数、标志或端点在当前安装版本中缺失,应查阅已安装版本的文档并调整,切勿虚构 API。若必需输入、标识符或参数不明确,应询问用户或在运行前明确说明假设。完整性规则:绝不捏造结果、参数、标识符、引用或统计;绝不报告本次会话未计算的指标;版本相关细节可能过时,应以已安装版本的官方文档为准;涉及费用、共享 GPU 或云配额、个人或患者数据、不可撤销操作前应先询问。
相关技能:polars(高性能 DataFrame 库,用于 Python ETL、分析与 pandas 迁移)、ray-data(面向 ML 工作负载的可扩展数据处理)、ray-train(跨集群的分布式训练编排)。