UDF函数和UDTF函数的图解举例,追加UDAF函数

简述UDF/UDAF/UDTF是什么,各自解决问题及应用场景 - 玩转大数据 - 博客园

自定义UDF和UDTF函数的两个作用点:

1.埋点log打印日志,方便任务出现问题后进行调试

2.有一些SQL解决不了的问题,可以通过java代码实现UDF\UDTF函数来辅助解决

  • UDF

  • 实现步骤(Java创建自定义UDF类)

    • 自定义一个java类
    • 继承UDF类
    • 重写evaluate方法
    • 打包类所在项目成一个all-in-one的jar包并上传到hive所在机器
    • 在hive中执行add jar操作,将jar加载到classpath中。
    • 在hive中创建模板函数,使得后边可以使用该函数名称调用实际的udf函数
    • hive sql中像调用系统函数一样使用udf函数
  • UDF函数属于一对一的关系,对一个集合中的每一数据进行一个操作,得到等量的结果,在具体的使用中比如对一组数据中的一个字段数据进行一个加密操作,或者是将一整组数据大写改成小写

UDTF

实现步骤

  • 自定义一个java类
  • 继承UDAF类
  • 内部定义一个静态类,实现UDAFEvaluator接口
  • 实现方法init,iterate,terminatePartial,merge,terminate,共5个方法. 详见下图
  • 在hive中执行add jar操作,将jar加载到classpath中。
  • 在hive中创建模板函数,使得后边可以使用该函数名称调用实际的udf函数
  • hive sql中像调用系统函数一样使用udaf函数

UDTF函数是一个一对多的关系,由一个参数得到多个结果,在具体的使用中包括有对一组数据进行一个行转列的列式存储的一个转化,在SQL对应的方法是explod

UDAF函数

属于多对一的关系,他具体的使用比如是在行式存储列转行的时候使用,将多行转换成一行

在SQL中对应的方法是 collect_list、collect_set

collect_list和collect_set之间的区别点在于collect_set是去重的,而collect_list是不去重的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值