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

PySpark SQL关联tip与user表查询Yelp数据集发tip最多的前10用户

问题原因排查
  • SQL语法顺序错误:SQL语句的执行顺序有严格要求,JOIN操作必须紧跟在FROM之后,LIMIT是语句最后执行的逻辑,你将LEFT JOIN放在GROUP BY、LIMIT之后,违反了语法规范,直接触发解析报错。
  • 关联条件错误:你使用tip.user_id = user.name作为关联条件,两个字段业务含义完全不匹配,tip表的user_id是用户唯一标识,需要和user表的同名字段user_id关联才能匹配到对应用户信息。
  • 缺少排序逻辑:统计完每个用户的tip发布量后没有按发布量降序排序,直接LIMIT 10获取的是随机10个用户的统计结果,不符合「发布tip数量最多前10名」的需求。
  • 聚合逻辑不严谨:直接JOIN两张表后按user_id分组,SELECT中的user.name字段既没有出现在GROUP BY子句中,也没有被聚合函数包裹,在严格模式的Spark SQL环境中会触发额外报错。
正确实现方案

推荐先统计tip表的用户发布量、排序取前10之后再关联用户表,避免全量关联两张大表,性能更优:

query = """
SELECT t.user_id, t.tip_count, u.name
FROM (
    -- 子查询统计每个用户的tip发布量,降序取前10
    SELECT user_id, COUNT(*) AS tip_count
    FROM tip
    GROUP BY user_id
    ORDER BY tip_count DESC
    LIMIT 10
) t
LEFT JOIN user u 
ON t.user_id = u.user_id
"""
spark.sql(query).show()

如果不需要保留未匹配到用户名的用户,可将LEFT JOIN替换为INNER JOIN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:45:10