UDF、UDAF、UDTF之间的区别

32 篇文章 2 订阅

1、UDF:用户定义(普通)函数,只对单行数值产生作用;

继承UDF类,添加方法 evaluate()

    /**
     * @function 自定义UDF统计最小值
     *
     */
    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 Funcation;用户定义聚合函数,可对多行数据产生作用;等同与SQL中常用的SUM(),AVG(),也是聚合函数;

聚合函数使用:

		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之前

UDAF实现有简单与通用两种方式:

  • a. 简单UDAF因为使用Java反射导致性能损失,而且有些特性不能使用,已经被弃用了;
  • b. 另一种涉及两个类:AbstractGenericUDAFResolver、GenericUDAFEvaluator;
    • 继承UDAFResolver类,重写 getEvaluator() 方法;
    • 继承GenericUDAFEvaluator类,生成实例给getEvaluator();
    • 在GenericUDAFEvaluator类中,重写init()、iterate()、terminatePartial()、merge()、terminate()方法;

可参考: hive udaf开发入门和运行过程详解
Hive UDAF开发详解

3、UDTF:User-Defined Table-Generating Functions,用户定义表生成函数,用来解决输入一行输出多行;

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

可参考: hive中UDTF编写和使用(转).

hive0.13的udtf使用例子.

4、其它

删除临时函数

		drop temporary function toUpper;

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值