如何在Spark SQL中合并相同movieId与movieName的genre列值?
用Spark SQL实现同电影的Genre合并
这事儿简单!你需要用到Spark SQL的分组聚合和字符串拼接函数,就能完美实现你要的效果。
核心思路
- 按
movieId和movieName对数据分组,把同一部电影的所有行归为一组 - 把每组里的
genre字段收集成一个列表 - 用指定分隔符(比如你例子里的
|)把列表里的genre拼接成单个字符串
具体SQL代码
假设你的数据表名为movies,执行下面的查询就能得到目标结果:
SELECT movieId, movieName, concat_ws('|', collect_list(genre)) AS genre FROM movies GROUP BY movieId, movieName ORDER BY movieId;
代码解释
GROUP BY movieId, movieName:确保相同ID和名称的电影被分到同一组collect_list(genre):将每组内的所有genre值收集成一个数组(保留原始顺序)concat_ws('|', ...):用|作为分隔符,把数组里的genre元素拼接成一个完整的字符串,和你期望的输出格式完全匹配
额外小提示
如果你的数据里可能存在重复的genre(比如同一部电影被标记了两次action),可以把collect_list换成collect_set,它会自动去重,只保留唯一的genre值:
SELECT movieId, movieName, concat_ws('|', collect_set(genre)) AS genre FROM movies GROUP BY movieId, movieName ORDER BY movieId;
内容的提问来源于stack exchange,提问作者Chandrasekhar Vasamsetti
相关产品推荐
相关产品推荐

