用途:Dask 用于将 pandas/NumPy 工作流扩展到超出内存限制的数据,并可跨多核或多机分布执行。适用场景包括数据集超过可用内存、需要并行化 pandas 或 NumPy 操作、高效处理多个 CSV/Parquet 文件、构建自定义并行工作流。
主要能力:提供四类集合——DataFrame(类似 pandas,用于表格数据、CSV/Parquet)、Array(类似 NumPy,用于数值数组与矩阵)、Bag(类似 list,用于非结构化数据、JSON 日志)、Delayed(包装任意 Python 函数)。所有集合都是惰性的,只有调用 .compute() 才真正计算。Dask 会先构建任务图,进行优化后再并行执行。支持的 DataFrame 操作包括筛选、聚合(groupby、sum、mean、count)、变换(apply、map_partitions)、连接(merge、join,会触发数据 shuffle)以及 I/O(read_csv、read_parquet、to_parquet)。
使用方式:读取用 dd.read_csv()、dd.read_parquet() 惰性加载,链式变换后只调用一次 .compute(),不要在循环中反复调用。调度器可选 threaded(默认,适合释放 GIL 的 NumPy/Pandas)、processes(scheduler='processes',适合纯 Python)、synchronous(scheduler='synchronous',用于调试)和 distributed(通过 Client(),用于监控、扩展与集群)。分块方面,DataFrame 按行划分为 partition,Array 按维度划分为 chunk,建议每个分块约 100 MB。
常见模式:ETL 流程为惰性读取、链式筛选变换、最后一次性 compute 或 to_parquet;多文件处理可用 glob 模式(如 dd.read_csv('data/*.csv'))并按文件分区;自定义操作可用 map_partitions、map_blocks 或 delayed。
限制与注意:应避免 iterrows、apply(axis=1) 和重复 compute(),sort_values 代价高;建议使用 Parquet,分区与文件对应,检查任务图规模(len(ddf.dask_graph()) < 100k),并可借助 Dashboard 监控。其他事实(如收费、价格、平台要求)暂未提供。