hive 用户自定义函数udf,udaf,udtf

udf:一对一的关系
udtf:一对多的关系
udaf:多对一的关系

使用Java实现步骤

自定义编写UDF函数注意:

1.需要继承org.apache.hadoop.hive.ql.exec.UDF
2.需要实现evaluete函数

编写UDTF函数注意:

1.需要继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF
2.实现 initialize, process, close三个方法

1.自定义实现一个大小写转换的函数(UDF)
hive 用户自定义函数udf,udaf,udtf_第1张图片
执行mvn命令
hive 用户自定义函数udf,udaf,udtf_第2张图片
将jar包上传到服务器上

hive 用户自定义函数udf,udaf,udtf_第3张图片
上传之后,进入hive,添加jar包
add jar ///xxx.jar(jar包全路径)
创建临时函数
create temporary function upper_func as ‘org.example.Uppercase’;
在这里插入图片描述
之后,可以直接在查询中使用
hive 用户自定义函数udf,udaf,udtf_第4张图片

transform方式

hive中除了使用Java编写udf,还可以使用transform,支持多种语言
例如: 将表第一列与第二列用 _ (下划线) 连接
1.Linux中的 awk
创建一个transform.awk
内容

{
	print $1"_"$2
}

在hive中使用add file 添加 transform.awk
然后就可以调用函数了
select transform(col1,col2) using “awk -f transform.awk” as (uu) from test_table limit 10;

2.使用python
在hive中使用 add file 添加 transform.py
使用命令调用函数
select transform(col1,col2) using “python transform.py” as (uu) from test_table limit 10;
3.基于python实现wordcount
整个过程模拟map 和 reduce
add file 上传 mapper.py 和 reduce.py
创建一张表,保存结果

create table word_cnt(
word string , 
cnt int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';
WITH map_cnt as  (
select transform(line) using "python mapper.py" as  word , cnt 
from docs  
cluster by word ),

insert  overwrite table word_cnt 
select transform(word,cnt) using "python reduce.py" as w, c  
from map_cnt 

你可能感兴趣的:(大数据学习之旅,hive,hadoop,数据仓库)