UDF、UDAF、UDTF

UDF

概念:

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

UDF 的类型:

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

UDF开发步骤在这里插入图片描述

继承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文件

在这里插入图片描述

复制到正确的HDFS路径

在这里插入图片描述
在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

一列拆多列,一行拆多行,一列一行拆多列多行
在这里插入图片描述

一列拆多列
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;

在这里插入图片描述

一行拆多行
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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值