用途:把 Daft 的单机工作流扩展到分布式 Ray 集群执行,适用于性能优化或处理大规模数据的场景。
主要能力与策略:
- Shuffle 重分区:使用 repartition(N),适合轻量数据(如文件路径)和 Join,能实现全局均衡,但会物化数据、内存占用较高。
- Streaming 流式分批:使用 into_batches(N),适合重数据(图像、张量),内存占用低,但批次过小会带来较高调度开销。
常见用法: 轻量数据重分区,适合在重读取前分发文件路径: df = daft.read_parquet("s3://metadata").repartition(100) df = df.with_column("data", read_heavy_data(df["path"]))
重数据流式分批,适合处理大分区而不 OOM: df = df.read_parquet("heavy_data").into_batches(64) df = df.with_column("embed", model.predict(df["img"]))
高级调优目标:让所有 actor 保持忙碌,同时避免 OOM 或调度瓶颈。 重分区(轻量数据/路径)公式: Min Rows Per Partition = Batch Size * (Total Concurrency / Nodes) Max Partitions = Total Rows / Min Rows Per Partition 示例:100 万行、4 节点、总并发 16、Batch Size 64,则 Min Rows 为 64*(16/4)=256,Max Partitions 约为 3906,建议使用约 1000 个分区以让每个任务运行多个批次: df = df.repartition(1000)
流式(重数据/图像)公式:避免创建过小分区,保持分区较大(如 1GB+),用 into_batches(Batch Size) 控制内存: df = df.into_batches(64).with_column("preds", model(max_concurrency=16).predict(df["img"]))
限制:资料未提供具体版本要求、集群配置细节、收费或平台支持信息。