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

如何基于RDD通过ReduceByKey统计各榜单歌曲榜首总天数

正确处理步骤说明

你的思路不对,不能先按song单独分组——我们要统计的是同一首歌在不同榜单的独立榜首天数,核心是按「榜单类型+歌曲名称」的组合键来分组统计,具体步骤如下:

1. 转换数据结构

把每条过滤后的榜首记录,转换成以(chart_type, song)作为唯一标识的键,值固定为1(每条记录对应1天榜首)。
比如示例中的第一条记录:
('top200', '501', '1', '2021-03-26T00:00:00.000+02:00')
会被转换为:
(('top200', '501'), 1)

2. 按组合键聚合求和

使用reduceByKey对相同组合键的value进行求和,求和结果就是该歌曲在对应榜单的总榜首天数。

3. 格式化输出结果

把聚合后的键值对转换成你需要的chart_type, song, days in #1格式。


示例代码(PySpark)

假设你已经有过滤好的RDD(仅包含排名为'1'的记录):

# 转换为组合键+计数1的RDD
keyed_rdd = filtered_rdd.map(lambda record: ((record[0], record[1]), 1))
# 聚合求和
counted_rdd = keyed_rdd.reduceByKey(lambda a, b: a + b)
# 转换为目标输出格式
result_rdd = counted_rdd.map(lambda item: f"{item[0][0]}, {item[0][1]}, {item[1]}")

# 查看结果
for line in result_rdd.collect():
    print(line)

示例输出结果

top200, 501, 3
viral50, Gowtu, 3
top200, Lonely (with benny blanco), 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:33:30