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

Scala中如何合并Spark两个key不同的RDD实现分组求和输出

实现方案

核心思路

  • 首先处理同义词RDD生成全量映射:单数词映射到自身、复数词映射到对应单数词,保证所有物品词都能匹配到唯一的单数主键
  • 解析物品数量RDD为标准键值对格式(如果已经是键值对可跳过解析步骤)
  • 两个RDD关联后替换主键为单数形式,按主键聚合求和即可得到结果

Scala 代码实现

// 1. 处理同义词rdd1,生成「原词 -> 对应单数词」映射
val wordToSingle = rdd1.flatMap(line => {
  val Array(single, plural) = line.split(",").map(_.trim)
  List((single, single), (plural, single))
})

// 2. 处理rdd2为(物品词, 数量)的标准键值对
// *如果你的rdd2已经是解析完成的RDD[(String, Int)]键值对类型,可直接跳过这一步的解析逻辑*
val itemCount = rdd2.map(line => {
  val parts = line.replaceAll("[()]", "").split(",").map(_.trim)
  (parts(0), parts(1).toInt)
})

// 3. 关联合并后按单数词求和
val result = itemCount.join(wordToSingle)
  .map { case (_, (count, singleWord)) => (singleWord, count) }
  .reduceByKey(_ + _)

// 输出验证
result.collect().foreach(println)

输出结果

运行上述代码后将得到你预期的输出:

(apple,62)
(car,45)
(computer,88)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:09:04