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.
                    一、报错详情codeselect id	, content_mapfrom test_db.test_tbhaving content_map is not null errorgrouping expressions sequence is empty, and 'test_db.test_tb.`id`' is not an aggregate function. Wrap ...
3、然后再将这部分用户id关联回行为表,获得这部分用户的所有行为
具体代码我就不贴出来了,应该比较简单吧,就是读取行为表,过滤特定的行为,然后将这部分数据去重就得到特定行为的用户,最后把这些用户关联回行为表,就拿到了这部分特定用户的行为
				
赠送jar包:lucene-grouping-7.3.1.jar; 赠送原API文档:lucene-grouping-7.3.1-javadoc.jar; 赠送源代码:lucene-grouping-7.3.1-sources.jar; 赠送Maven依赖信息文件:lucene-grouping-7.3.1.pom; 包含翻译后的API文档:lucene-grouping-7.3.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-grouping:7.3.1; 标签:apache、lucene、grouping、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
赠送jar包:lucene-grouping-7.2.1.jar; 赠送原API文档:lucene-grouping-7.2.1-javadoc.jar; 赠送源代码:lucene-grouping-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-grouping-7.2.1.pom; 包含翻译后的API文档:lucene-grouping-7.2.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-grouping:7.2.1; 标签:apache、lucene、grouping、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Spark聚合函数一、Spark聚合函数特殊场景二、spark sql group by 一、Spark聚合函数特殊场景 在对数据进行统计分析时,如果对指标进行聚合运算,而待查询的字段中还包含了维度,则原则上我们还需要按照维度字段进行分组。倘若这个聚合运算为sum函数,分组之后就相当于分类汇总了。有一种特殊场景是我们对指标执行了sum聚合,查询字段也包含了维度,但我们不希望对维度分组。例如: se...
DataFrame.select(min(substring(col("A"),2,8)),max(substring(col("A"),2,8)),sum(col("B"))) 报错提示需要aggregate by信息 是我用错了,不能使用col("A")来取A列的值再substring, 应该直接用substring("A",2,8) 取a列的第二个字符起的八位字符,取最大值、最小值做时间...
-- 列数或类型不一致,无法插入表 Cannot insert into target table because column number/types are different -- 表无分区
这是一个 Java 8 中的 Collectors 工具类的方法,用于将一个对象流按照指定的属性进行分组。在这个例子中,Order::getOrderId 表示按照订单号进行分组。具体实现可以参考以下代码: Map<String, List<Order>> orderMap = orderList.stream() .collect(Collectors.groupingBy(Order::getOrderId)); 其中 orderList 是一个包含多个 Order 对象的 List。执行完上述代码后,orderMap 中的每个键值对表示一个订单号及其对应的订单列表。
[解决办法]Python中使用json.loads解码字符串时出错:ValueError: Expecting property name: line 1 column 2 (char 1) 48212