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
好文阅读
发表评论