You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Ray实现Join、Group By操作合并接近内存容量的大型数据集

基于Ray实现超大规模数据集Join/GroupBy操作方案

Ray原生提供的分布式数据集组件Ray Data已内置成熟的Join、GroupBy算子和分布式Shuffle能力,完全支持超出集群总内存的大数据集处理,可直接匹配你的场景。

基础使用方式

直接调用Ray Data的标准API即可实现需求,底层会自动处理分布式分片、内存不足时的磁盘落盘、跨节点Shuffle逻辑,无需手动实现复杂的Shuffle流程:

import ray
from ray.data import read_parquet

# 连接本地部署的Ray集群,填head节点地址即可
ray.init(address="ray://<head-node-ip>:10001")

# 分块加载两个大型数据集,不会一次性全量载入内存
# 支持读取本地磁盘、HDFS、对象存储等多种数据源的csv、parquet、json等格式
ds_left = read_parquet("/data/path/dataset_a", parallelism=200)
ds_right = read_parquet("/data/path/dataset_b", parallelism=200)

# 执行Join操作,支持inner、left、right、outer等多种连接类型
joined_ds = ds_left.join(ds_right, on="公共关联键字段名", how="inner")

# 如需Group By操作可直接调用内置接口
grouped_ds = joined_ds.groupby("分组字段名").agg(
    sum=ray.data.aggregate.Sum("统计字段名"),
    count=ray.data.aggregate.Count("统计字段名")
)

# 结果可直接写入存储,也可无缝传递给Ray XGBoost等组件用于后续机器学习任务
joined_ds.write_parquet("/data/path/join_result")

集群配置优化建议

针对超内存数据集场景,可提前调整以下配置保障运行稳定性:

  • 开启内存落盘能力:所有Ray节点配置ray.data.spilling.enabled=true,并将ray.data.spilling.local_dir设置为磁盘剩余空间充足的目录,避免内存不足触发OOM
  • 调整并行度:参考「总数据量/128MB」估算并行度数值,保证每个数据分片大小在100~200MB区间,可获得最优的Shuffle性能
  • 关联键倾斜优化:如果数据集关联键存在分布倾斜的情况,开启ray.data.execution.optimizations.repartition_join_enabled配置,Ray会自动优化倾斜场景的执行逻辑

内容的提问来源于stack exchange,提问作者vvladymyrov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 00:15:07