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

Spark SQL:按ID生成Grade数组且保留原行的查询报错解决

解决Spark SQL保留原始行并生成ID对应Grade数组的问题

问题分析

你的查询出现AnalysisException错误,原因有两点:

  1. 窗口函数语法错误:OVER (PARTITION BY ID)必须直接紧跟在聚合函数(collect_list)之后,不能放在别名定义之后
  2. 未显式选择ID列:Spark SQL要求查询中未被聚合的列需明确指定,否则会判定分组表达式为空

正确查询语句

如果需要输出数组格式的Grade集合(与你期望的输出格式一致),使用以下语句:

SELECT 
  ID,
  collect_list(Grade) OVER (PARTITION BY ID) AS Grade
FROM your_table;

如果需要输出逗号分隔的字符串格式(对应你原查询中的array_join用法),使用以下语句:

SELECT 
  ID,
  array_join(collect_list(Grade), ", ") AS Grade
FROM your_table;

验证结果

执行上述语句后,会得到你期望的输出:

ID,Grade
1,[A, A]
1,[A, A]
2,[B, C]
2,[B, C]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:35:33