Hive-函数(二)自定义UDF函数开发案例
1.创建一个java工程
2.Settings找到自己的Maven
3.pom.xml配置文件
接着将之前项目中配好的pom.xml配置内容复制过来--》自动加载(右下角的小标签中的第一个)
4.加载hive的依赖
1)百度上搜maven--》进入官网 https://mvnrepository.com/search?q=Maven
2)搜Maven--》选左侧栏中的org.apache--》点进第一个Hive Query Language
3)选择1.2.1版本的:
4)复制这个依赖到pom.xml文件里:
5.代码实现自定义-UDF函数
1)创建包、一个类--》自写代码:
package hive; import org.apache.hadoop.hive.ql.exec.UDF; public class UDF_Lower extends UDF { public String evaluate(final String s){ if(s==null){ return null; } return s.toLowerCase(); } } |
2)通过Maven打成jar包:clean--》package
上传到/opt/module/hive-1.2.1/lib目录下
3)加载自定义函数
(1)加载上临时函数的jar包
hive (default)> add jar /opt/module/hive-1.2.1/lib/hive-1.0-SNAPSHOT.jar;
Added [/opt/module/hive-1.2.1/lib/hive-1.0-SNAPSHOT.jar] to class path
Added resources: [/opt/module/hive-1.2.1/lib/hive-1.0-SNAPSHOT.jar]
(2)创建临时函数-与开发好的java class关联(全类名)
这里的全类名就是:右键自定义的类--》选择Copy Reference--》粘贴上
hive (default)> create temporary function udf_lower as "hive.UDF_Lower";
4)即可在hql中使用自定义的函数strip
hive (default)> select ename, udf_lower(ename) lowername from emp;
解释: select ename `大写`, udf_lower(ename) `小写` from emp;
比如在/opt/module/hiveTest/目录下先创建一个文件stu1,里面内容是:
JAVA
LINUX
Hadoop
hdfs
MR
Yarn
ZOOKeeper
Flume
Hive
然后再创建一个表-stu1:
hive (default)> create table stu1
> (name string)
> row format delimited fields terminated by '\t';
接着加载数据到stu1表中:
hive (default)> load data local inpath '/opt/module/hiveTest/stu1' into table stu1;
接着使用自定义函数:
hive (default)> select name,udf_lower(name) lowername from stu1;
OK
name lowername
JAVA java
LINUX linux
Hadoop hadoop
hdfs hdfs
MR mr
Yarn yarn
ZOOKeeper zookeeper
Flume flume
Hive hive
Time taken: 0.31 seconds, Fetched: 9 row(s)