Spark Sql之UDAF自定义聚合函数

本文介绍了Spark SQL中的UDAF(User Defined Aggregate Function),对比了UDAF与UDF的区别,澄清了UDAF并非必须与group by配合使用的误解,并详细解释了update、merge、evaluate三个关键方法的含义。同时,通过一个自定义UDAF的实战示例,帮助读者更好地理解和应用UDAF。
摘要由CSDN通过智能技术生成

一:UDAF含义


UDAF:User Defined Aggregate Function。用户自定义聚合函数

对比UDF:
UDF,其实更多的是针对单行输入,返回一个输出
UDAF,则可以针对多行输入,进行聚合计算,返回一个输出


二:关于UDAF的一个误区


我们可能下意识的认为UDAF是需要和group by一起使用的,实际上UDAF可以跟group by一起使用,也可以不跟group by一起使用,这个其实比较好理解,联想到mysql中的max、min等函数,可以:

1

select max(foo) from foobar group by bar;

表示根据bar字段分组,然后求每个分组的最大值,这时候的分组有很多个,使用这个函数对每个分组进行处理,也可以:

1

select max(foo) from foobar;

这种情况可以将整张表看做是一个分组,然后在这个分组(实际上就是一整张表)中求最大值。所以聚合函数实际上是对分组做处理,而不关心分组中记录的具体数量。

 
三:UDAF中:update,merge,evaluate方法的含义


update:各个分组的值内部聚合
merge:各个节点的同一分组的值聚合
evaluate:聚合各个分组的缓存值


四:自定义UDAF实战


定义:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值