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

如何用reduceByKey统计RDD中列值在对应列列表中的出现次数?

解决Spark RDD中统计目标元素在列表中出现次数的问题

我来帮你分析下问题出在哪,以及怎么搞定它~

首先,你用reduceByKey的思路完全走偏了:reduceByKey的核心是对拥有相同key的多个value做聚合合并,但你的userMovies RDD里每个userID都是唯一的(至少示例数据里是这样),所以reduceByKey根本不会触发任何聚合操作,直接返回了原RDD每个元素经过lambda处理后的结果——而且你的lambda写法本身也不符合reduceByKey的要求(它需要接收两个参数来合并同key的value,你只写了一个参数)。

那正确的做法应该是这样的:

步骤1:转换每个元素为判断结果

先通过map算子,对RDD中的每个元素单独做判断:检查元组里的第一个值(也就是你说的第二列)是否存在于第三个元素的列表中,返回1(存在)或0(不存在)。

Scala代码示例:

// 处理每个元素,生成1或0的RDD
val indicatorRDD = userMovies.map { case (userId, (targetMovie, movieList)) =>
  if (movieList.contains(targetMovie)) 1 else 0
}

Python代码示例:

# 处理每个元素,生成1或0的RDD
indicator_rdd = userMovies.map(lambda item: 1 if item[1][0] in item[1][1] else 0)

步骤2:对所有结果求和

接下来只需要把这个RDD里的所有数值加起来,就能得到总出现次数了:

Scala代码示例:

val totalOccurrences = indicatorRDD.sum()

Python代码示例:

total_occurrences = indicator_rdd.sum()

这样就能得到你想要的统计结果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:39:24