一、UDF

1、要解决的问题

in:out=1:1,只能输入一条记录当中的数据,同时返回一条处理结果。
属于最常见的自定义函数,像cos,sin,substring,instr等均是如此要求。

2、实现步骤

  1. 自定义一个java类
  2. 继承UDF类
  3. 约定俗成的重写evaluate方法
  4. 打包类所在项目成一个all-in-one的jar包并上传到hive所在机器
  5. 在hive中执行add jar操作,将jar加载到classpath中。

add jar hdfs:// 路径

  1. 在hive中创建模板函数,使得后边可以使用该函数名称调用实际的udf函数

create temproary function

  1. hive sql中像调用系统函数一样使用udf函数

    二、UDAF

    1、解决的问题

    in:out=n:1,即输入N条数据,返回一条处理结果,即列转行。
    最常见的系统聚合函数,如count,sum,avg,max等

    2、实现步骤

  2. 自定义一个java类

  3. 继承UDAF类
  4. 内部定义一个静态类,实现UDAFEvaluator接口
  5. 实现方法init,iterate,terminatePartial,merge,terminate共5个方法.

图片.png
打包类所在项目成一个all-in-one的jar包并上传到hive所在机器
在hive中执行add jar操作,将jar加载到classpath中。
add jar hdfs:// 路径
在hive中创建模板函数,使得后边可以使用该函数名称调用实际的udf函数
create temproary function
hive sql中像调用系统函数一样使用udf函数

三、UDTF

1、解决的问题

  • 解决一行输入多行输出,即1:n,即行转列应用
  • 往往被lateral view explode+udf等替代实现,比直接用udtf会更简单、直接、更灵活一些