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
相关产品推荐
相关产品推荐

