udf,udaf,udtf区别与联系

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三方法;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值