Hive_UDF函数

UDF是User defined Function的简写,意思是用户自定义方法。

UDF开发流程

1 eclipse开发一个java程序,导入hive的jar包

2 开发代码

3 将java程序打成jar包,上传到hive所在的机器上,

注意开发代码的环境和运行环境的jdk版本要一致,不然会报错Unsupported major.minor version 52.0

4 在hive的命令行中输入以下命令,将程序jar包添加到hive运行时的classpath中

5 在hive中创建一个函数名,映射到自己开发的java类:

6 接下来就可以使用自定义的函数了
 
下面是一个Demo:
 
有如下原始数据:

1,zhangsan:18:beijing|male|it,2000

2,lisi:28:beijing|female|finance,4000

3,wangwu:38:shanghai|male|project,20000

 

1先建表:

create table t_user(id int,user_info string,salary int)
row format delimited
fields terminated by ',';

 

2导数:

load data local inpath "/home/test.txt" into table t_user;

3上表不方便做细粒度的分析挖掘,需要将user_info字段拆解成多个字段,用hive自带的函数不方便,

通过自定义一个函数来实现拆解功能。

 

public class UserInfoParser extends UDF {
    public String evaluate(String field, int index) {
        String replaceAll = field.replaceAll("\|", ":"); --将|替换为:
        String[] split = replaceAll.split(":");  --字符串切割
        return split[index-1];
    }
}

 

4将java程序打成jar包,上传到hive所在的机器上

 

5在hive的命令行中输入以下命令,将程序jar包添加到hive运行时的classpath中:

hive> add jar /home/badou/Documents/parseinfo.jar;

 

6在hive中创建一个函数名,映射到自己开发的java类:

hive> create temporary function parseinfo as 'hive_udf.UserInfoParse';

 

7接下来就可以使用自定义的函数uinfo_parse了

用函数拆解原来的字段,然后将结果保存到一张明细表中:

create table t_user_info
as
select
id,
parseinfo(user_info,1) as uname,
parseinfo(user_info,2) as age,
parseinfo(user_info,3) as addr,
parseinfo(user_info,4) as sexual,
parseinfo(user_info,5) as hangye,
salary
from
t_user;

 

 8 查询解析结果

 

原文地址:https://www.cnblogs.com/lucas-zhao/p/11908273.html