PySpark按客户产品分组统计订单时最大金额与总金额一致问题求助
问题原因与解决方案
1. 首要语法错误
你提供的SQL语句中,total_order的别名反引号没有闭合,会导致Spark SQL解析器无法正常识别SUM聚合逻辑,是触发两个字段值完全一致的核心原因。
2. 修正后代码
order_df.createOrReplaceTempView('order_df') order_agg_df = spark.sql(""" SELECT cust_id, prod_id, MAX(order_amount) as `largest_order`, SUM(order_amount) as `total_order` FROM order_df GROUP BY cust_id, prod_id """) order_agg_df.show()
3. 兜底排查方案
如果修正语法后问题仍然存在,说明你使用的order_df已经是提前按cust_id+prod_id聚合过的结果,每个分组仅存1条数据,此时MAX和SUM的计算结果必然一致。你可以运行以下语句验证分组行数:
SELECT cust_id, prod_id, COUNT(1) as order_count FROM order_df GROUP BY cust_id, prod_id
如果返回的order_count全为1,替换order_df为未做过聚合的原始订单数据表即可。
内容的提问来源于stack exchange,提问作者user3459293
相关产品推荐
相关产品推荐

