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)
 
 执行mvn命令
 
 将jar包上传到服务器上

 上传之后,进入hive,添加jar包
 add jar ///xxx.jar(jar包全路径)
 创建临时函数
 create temporary function upper_func as ‘org.example.Uppercase’;
 
 之后,可以直接在查询中使用
 
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 
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!