用途:Dask 用于把 pandas 与 NumPy 风格的运算扩展到单机内存之外,或并行与分布式执行,从笔记本(约 100 GiB)到集群(约 100 TiB)均可使用,同时保持熟悉的 Python API。
主要组件:DataFrames 做并行的 pandas 操作,适合超出内存的表格数据与多文件读取;Arrays 用分块算法扩展 NumPy,适合超内存数组与科学数据;Bags 以函数式操作处理文本、JSON、日志等非结构化数据;Futures 基于任务的并行化,适合动态、演化的工作流;Schedulers 控制执行后端(threads、processes、synchronous、distributed)。
使用方式:读写以惰性任务图构建,调用 .compute() 才真正执行;可用 map_partitions、map_blocks 做自定义操作;Futures 需先创建 distributed Client,任务提交后立即执行;通过 dask.config.set(scheduler=...) 或 per-compute 切换调度器。
适用场景:超出内存的数据集、多 CSV/Parquet/JSON 文件的并行处理、ETL 流水线、非结构化日志清洗后再转 DataFrame、大规模数组计算,以及需要 dashboard 监控的多机集群任务。
限制与注意事项:Dask 不替代简单方案,先考虑更好算法、Parquet 等高效格式、编译代码或抽样。不要先把大数据读到本地 pandas 再交给 Dask,应让 Dask 直接读;避免重复 compute,尽量用 dask.compute(*computations) 合并;任务图不要过大,分块目标约 100 MB;块太小会增加调度开销。自 2025.1 起查询规划 DataFrame 是唯一实现,dask.config.set({"dataframe.query-planning": False}) 已不存在。文本列以 string dtype 载入,对含非数值列的 ddf.mean() 会抛 TypeError,ddf.groupby(...).mean() 会抛 NotImplementedError,需选择列或传 numeric_only=True。使用 foldby 而非 groupby 可提升性能,复杂分析前应转为 DataFrame/Array。选择线程、进程或分布式需结合运算类型与开销。