[解决方案]spark 2.4 报错:grouping expressions sequence is empty, *** is not an aggregate function.
Posted Sinsa_SI
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[解决方案]spark 2.4 报错:grouping expressions sequence is empty, *** is not an aggregate function.相关的知识,希望对你有一定的参考价值。
写在最前面
这里仅讨论spark 升级到 2.4 过程中 having
条件语句导致报错的情形,其他情形请参考 Spark中进行聚合时的特殊场景 。
一、报错详情
code
select id
, content_map
from test_db.test_tb
having content_map is not null
error
grouping expressions sequence is empty, and 'test_db.test_tb
.`id`' is not an aggregate function. Wrap '()' in windowing function(s) or wrap 'test_db.test_tb
.`id`' in first() (or first_value) if you don't care which value you get.;;
二、分析原因
在 spark 2.3 中,上面的 sql 执行正常,升级至 2.4 后才报错。主要的原因在于这两个版本对 having
条件语句计算逻辑不一样,2.4 执行过程中将 having
条件语句视为聚合运算后的一种过滤操作。源码中的解释:
In case of HAVING (a filter after an aggregate) we use both the aggregate and its child for resolution.
参考 源码解释 和 Spark中进行聚合时的特殊场景
三、解决方案
替换 having
条件表达,例如换成 where
条件。
select id
, content_map
from test_db.test_tb
where content_map is not null
以上是关于[解决方案]spark 2.4 报错:grouping expressions sequence is empty, *** is not an aggregate function.的主要内容,如果未能解决你的问题,请参考以下文章
Spark 报错解决--Error initializing SparkContext