hive 的udf(user defined function)自定义函数

本文介绍了如何在Hive中创建自定义UDF,包括从创建Java Maven项目、编写Java类到打包、添加到Hive classpath的过程。示例包括将字符串转为小写及生成数字范围列表的功能。此外,文章还讨论了UDF的核心——evaluate方法的重要性及其使用注意事项。

hive 的udf(user defined function)自定义函数

1.新建java maven 项目
2.pom.xml 中引入

        <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.7.4</version>
   	 	</dependency>
   	 	
        <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-exec</artifactId>
        <version>1.2.1</version>
    	</dependency>

3.写一个 java 类,继承 UDF,并重载 evaluate 方法【注意:udf类中并没有evaluate()方法,hive的内部机制会自动调用 evaluate()方法;同时自己创建的java类中可以定义多个evaluate()方法 如: public Text evaluate(Text s) {} public String evaluate(int end){}】【重写的evaluate()方法必须有返回值 不能用void修饰】
4.需求:定义一个自定义函数 将大写转换成小写 代码如下:

package cn.hive;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Lower extends UDF {
public Text evaluate(Text s) {
if (s == null) {
return null;
}
return new Text(s.toString().toLowerCase());

}

5.将项目打包 打包后 放到linux系统hive的默认目录【不需要上传到hdfs】【默认目录:/opt/molute/jars/ (没有的话自己创建目录)
6.将jar包 添加到hive的classpath 【进入hive命令】【此步骤也相当于在hive上注册jar包】
hive> add jar /opt/molute/jars/udf.jar;
若执行成功 显示如下:
hive> add jar /opt/module/jars/udf.jar;
Added [/opt/module/jars/udf.jar] to class path
Added resources: [/opt/module/jars/udf.jar]
7.创建临时函数与开发好的 java class 关联
create temporary function toLowerCase as ‘cn.hive.Lower’; [【’’ 里是java类的路径 toLoweCase 是起的函数名 temporary是临时的】
8.测试 :show functions; 看我们刚才创建的hive 的自定义函数 toLowerCase 有没有
有的话 ,我们使用toLoweCase() 函数查询我们的一张表peopeo数据试试 如:
select toLoweCase(name) from peopeo; 结果成功 。ok 结束。

9.再举个例子:需求: 输入一个数字,输出从1到该数字的一个列表

代码:

在这里插入图片描述
自我理解udf自定义函数:1.可以使用java中现有的方法 ,在evaluate(参数)方法中调用,并返回我们想要的数据即可。2.或者我们在java中自定义一个方法 写自己的业务实现功能,然后定义evaluate()方法时 传递适合的参数 调用我们自定义的方法 并evaluate 返回我们需要的数据 也行。
3.最终理解:就是hive内部机制会自动调用evaluate方法【只要注重 参数 和返回值即可 hive中自定义的方法名 随便起 默认执行evaluate方法中的业务逻辑并返回结果 evaluate方法返回的结果就是我们自定义函数想要的结果 所以 evaluate方法不能用void修饰】

小总:打好的包 不需要上传到hdfs上,有默认的路径 :/opt/molute/jars/ 【没有自己手动创建即可】上面创建的只是临时自定义函数 【对于每一行输入都会调用到evaluate()函数。而evaluate()函数处理后的值会返回给Hive。】,如果想创建永久自定义函数 我们需要
在 hive-site.xml 文件中添加

hive.aux.jars.path
file:///opt/module/hive/lib/json-serde-1.3.8-jar-with-dependencies.jar,file:///opt/module/jar/udf.jar

这里相当于添加了多个jar

永久注册

hive (default)>create function getdaybegin AS ‘com.lzl.hive.Lower’;

删除函数

hive (default)>drop function getdaybegin;
链接:https://blog.youkuaiyun.com/liangzelei/article/details/81206012

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值