udf,udaf,udtf区别与联系

本文深入探讨了Hadoop MapReduce中的三种用户定义函数——UDF(用户定义普通函数)、UDAF(用户定义聚合函数)和UDTF(用户定义表生成函数)。UDF用于一对一的数据转换,例如MD5计算;UDAF处理多行数据,如求和、最大值等;UDTF则能将一行数据转化为多行。通过示例代码,详细解释了它们的实现方式及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.udf:user defined function:用户定义(普通)函数,只对单行数值产生作用;由于udf不做聚合,所以它可任意嵌套。

特点:input:output=1:1

实例函数:md5,split,ltrim

应用场景:1:1的情况,比如md5...

实现方法:简单udf实现

extends UDF

方法名 evaluate

eg:

/** * @function 自定义UDF统计最小值

     * @author John

     *

     */

public class Min extends UDF {

        public Double evaluate(Double a, Double b) {

                if (a == null)

                        a = 0.0;

                if (b == null)

                        b = 0.0;

                if (a >= b) {

                        return b;

                 } else {

                         return a;

                }

         }

}

2.udaf:user defined aggregation function:用户定义聚合函数,可对多行数据产生作用;

特点: input:output=n:1

示例函数:sum,count,max,min......

实现方法涉及的两个类:AbstractGenericUDAFResolver、GenericUDAFEvaluator;

实现方法:extends UDAFResolver类,重写 getEvaluator() 方法;内部静态类实现接口UDAFEvaluator;继承GenericUDAFEvaluator类,生成实例给getEvaluator();

五大方法(在GenericUDAFEvaluator类中,重写5大方法):

init:初始化map或是reduce需用到的变量。

②iterate:迭代处理每条数据,true。

③terminatePartial:相当于mr的combiner。

④merge:其输入一定是terminatePartial的输出。

⑤terminate:处理的是merge的结果。

eg:

SELECT

        store_name, SUM(sales)

FROM

        Store_Information

GROUP BY

        store_name

HAVING

        SUM(sales) > 1500

ORDER BY

        SUM(sales);

关键字HAVING总要放在GROUP BY之后,ORDER BY之前;

3.udtf:user defined table function:用户定义表生成函数,用来解决输入一行输出多行;

特点:input:output=1:n

示例函数:explode、lateral view explore

实现方法:udf+explode;继承GenericUDTF类,重写initialize(返回输出行信息:列个数,类型), process, close三方法;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值