如何基于RDD中的第二列进行行数统计?
按分类统计RDD行数的正确解法
你之前的代码无法生效的核心问题是:没有将分类字段(如'Music')作为聚合的key,反而保留了原RDD的商品ID作为key进行reduceByKey操作,自然无法得到按分类统计的结果。
正确实现方式
针对你的RDD结构(每个元素为(商品ID, (分类, 评论信息列表))),可以通过以下两种方式实现按分类统计行数:
方法1:使用map+reduceByKey
先将分类字段提取为新的key,再按key累加计数:
from operator import add # 转换为(分类, 1)的结构,再按分类聚合 category_count_rdd = joinRDD.map(lambda item: (item[1][0], 1)).reduceByKey(add) # 查看结果 category_count_rdd.collect() # 示例输出:[('Music', 1)]
- 代码说明:
item[1]取到元组('Music', [...]),item[1][0]提取出分类字段作为新key;每个元素对应值设为1,最后用reduceByKey(add)累加同一分类的计数。
方法2:使用map+countByKey
如果只需要最终的统计字典(不需要RDD结果),可以用更简洁的countByKey:
# 提取所有分类字段,直接统计每个分类的出现次数 category_count_dict = joinRDD.map(lambda item: item[1][0]).countByKey() # 查看结果 print(category_count_dict) # 示例输出:{'Music': 1}
内容的提问来源于stack exchange,提问作者匿名
相关产品推荐
相关产品推荐

