欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

UDF、UDAF、UDTF

程序员文章站 2022-04-28 23:53:54
...

UDF

概念:

User Defined Function 用户自定义函数
是一个例程,它接受参数、执行操作并返回该操作的结果。根据定义,结果可以是标量值(单个)或表。

UDF 的类型:

UDF 主要有 3 种类型(SQL Server Management Studio 把内联表值函数与多语句表值函数放到了一个组中):
UDF:自定义标准函数
UDAF:自定义聚合函数
UDTF:自定义表生成函数

UDF开发步骤UDF、UDAF、UDTF

继承UDF类或GenericUDF类

重写evaluate()方法并实现函数逻辑

public class MyFunc extends UDF {
    public Text evaluate(ArrayList<Text> txt) {
        int male = 0;
        int female = 0;
        for (Text tx : txt) {
            String sex = tx.toString();
            if (sex.equalsIgnoreCase("male")) {
                male++;
            } else {
                female++;
            }
        }
        return new Text("male:"+male + ",female:"+female);
    }
}

编译打包为jar文件

UDF、UDAF、UDTF

复制到正确的HDFS路径

UDF、UDAF、UDTF
在hdfs里面创建文件夹func

hdfs dfs -mkdir /func/
hdfs dfs -put /opt/myfun.jar /func
add jar hdfs://192.168.56.100:9000/func/myfunc.jar

使用jar创建临时/永久函数

create function mytest as "com.njbdqn.MyFunc"
create function mytest as "com.njbdqn.MyFunc" using jar 'hdfs:/func/myfunc.jar'

调用函数

UDTF

一列拆多列,一行拆多行,一列一行拆多列多行
UDF、UDAF、UDTF

一列拆多列
create table myusers(
    > username string,
    > hobby string
    > )
    > stored as textfile;
insert into myusers values('zs','eat,sleep'),('ls','play,film');
add jar /opt/myfun.jar;
create temporary function myudtf as "com.njbdqn.MyUdtfFunc";
select myudtf(hobby) from myusers;
select split(hobby,',') from myusers;

UDF、UDAF、UDTF

一行拆多行
exit;
use mydemo;
add jar /opt/myfun.jar;
create temporary function myud as "com.njbdqn.MyUdtfFunc";
select myud(hobby) from myusers;
侧视图:只能有一列   一行拆多行
select explode(split(hobby,',')) from myusers;
侧视图放lk列
select username ,lk from myusers lateral view explode(split(hobby,',')) a as lk;
select username ,lk from myusers lateral view myud(hobby) a as lk;