[Hive_12] Hive 的自定义函数
0. 说明
UDF //user define function
//输入单行,输出单行,类似于 format_number(age,'000')
UDTF //user define table-gen function
//输入单行,输出多行,类似于 explode(array);
UDAF //user define aggr function
//输入多行,输出单行,类似于 sum(xxx)
Hive 通过 UDF 实现对 temptags 的解析
1. UDF
1.1 代码示例
1.2 用户自定义函数的使用
1. 将 Hive 自定义函数打包并发送到 /soft/hive/lib 下
2. 重启 Hive
3. 注册函数
# 永久函数
create function myudf as 'com.share.udf.MyUDF'; # 临时函数
create temporary function myudf as 'com.share.udf.MyUDF';
1.3 Demo
Hive 通过 UDF 实现对 temptags 的解析
0. 准备数据
1. 建表
create table temptags(id int,json string) row format delimited fields terminated by '\t';
2. 加载数据
load data local inpath '/home/centos/files/temptags.txt' into table temptags;
3. 代码编写
4. 打包
5. 添加 fastjson-1.2.47.jar & myhive-1.0-SNAPSHOT.jar 到 /soft/hive/lib 中
6. 重启 Hive
7. 注册临时函数
create temporary function parsejson as 'com.share.udf.ParseJson';
8. 测试
select id ,parsejson(json) as tags from temptags;
# 将 id 和 tag 炸开
select id, tag from temptags lateral view explode(parsejson(json)) xx as tag; # 开始统计每个商家每个标签个数
select id, tag, count(*) as count
from (select id, tag from temptags lateral view explode(parsejson(json)) xx as tag) a
group by id, tag; # 进行商家内标签数的排序
select id, tag , count, row_number()over(partition by id order by count desc) as rank
from (select id, tag, count(*) as count from (select id, tag from temptags lateral view explode(parsejson(json)) xx as tag) a
group by id,tag) b ; # 将标签和个数进行拼串,取得前 10 标签数
select id, concat(tag,'_',count)
from (select id, tag , count, row_number()over(partition by id order by count desc) as rank
from (select id, tag, count(*) as count from (select id, tag from temptags lateral view explode(parsejson(json)) xx as tag) a
group by id,tag) b )c
where rank<=10; #聚合拼串
//concat_ws(',', List<>)
//collect_set(name) 将所有字段变为数组,去重
//collect_list(name) 将所有字段变为数组,不去重
select id, concat_ws(',',collect_set(concat(tag,'_',count))) as tags
from (select id, tag , count, row_number()over(partition by id order by count desc) as rank
from (select id, tag, count(*) as count from (select id, tag from temptags lateral view explode(parsejson(json)) xx as tag) a
group by id,tag) b )c where rank<=10 group by id;
1.4 虚列:lateral view
123456 味道好_10,环境卫生_9
id tags
1 [味道好,环境卫生] => 1 味道好
1 环境卫生
select name, workplace from employee lateral view explode(work_place) xx as workplace;
1.5 类找不到异常
缺少 jar 包导致的: 类找不到异常的解决方案
问题描述
Caused by: java.lang.ClassNotFoundException: com.share.udf.ParseJson
解决方案
1. 将 fastjson 和 myhive.jar 放在 /soft/hadoop/share/hadoop/common/lib 下
cp /soft/hive/lib/myhive-1.0-SNAPSHOT.jar /soft/hadoop/share/hadoop/common/lib/ cp /soft/hive/lib/fastjson-1.2..jar /soft/hadoop/share/hadoop/common/lib/
2. 同步到其他节点
xsync.sh /soft/hadoop/share/hadoop/common/lib/fastjson-1.2..jar xsync.sh /soft/hadoop/share/hadoop/common/lib/myhive-1.0-SNAPSHOT.jar
3. 重启 Hadoop 和 Hive
stop-all.sh hive
2. UDTF
2.0 说明
Hive 实现 Word Count 通过以下两种方式
array => explode
string => split => explode
现在直接通过 UDTF 实现 WordCount
string => myudtf
2.1 代码编写
2.2 打包
将 myhive-1.0-SNAPSHOT.jar 添加到 /soft/hive/lib 中
2.3 重启 Hive
2.4 注册临时函数
create function myudtf as 'com.share.udtf.MyUDTF';
2.5 测试

select myudtf(line) from wc2;
2.6 流程分析
1. 通过 initialize的参数(方法参数)类型或参数个数
2. 返回输出表的表结构(字段名+字段类型)
3. 通过 process函数,取出参数值
4. 进行处理后通过 forward函数 将其输出
[Hive_12] Hive 的自定义函数的更多相关文章
- Hadoop生态圈-hive编写自定义函数
Hadoop生态圈-hive编写自定义函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Hadoop生态圈-Hive的自定义函数之UDTF(User-Defined Table-Generating Functions)
Hadoop生态圈-Hive的自定义函数之UDTF(User-Defined Table-Generating Functions) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Hadoop生态圈-Hive的自定义函数之UDAF(User-Defined Aggregation Function)
Hadoop生态圈-Hive的自定义函数之UDAF(User-Defined Aggregation Function) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Hadoop生态圈-Hive的自定义函数之UDF(User-Defined-Function)
Hadoop生态圈-Hive的自定义函数之UDF(User-Defined-Function) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- 【Hive】自定义函数
Hive的自定义函数无法满足实际业务的需要,所以为了扩展性,Hive官方提供了自定义函数来实现需要的业务场景. 1.定义 (1)udf(user defined function): 自定义函数,特 ...
- Hive中自定义函数
Hive的自定义的函数的步骤: 1°.自定义UDF extends org.apache.hadoop.hive.ql.exec.UDF 2°.需要实现evaluate函数,evaluate函数支持重 ...
- Hive中如何添加自定义UDF函数以及oozie中使用hive的自定义函数
操作步骤: 1. 修改.hiverc文件 在hive的conf文件夹下面,如果没有.hiverc文件,手工自己创建一个. 参照如下格式添加: add jar /usr/local/hive/exter ...
- Hive(9)-自定义函数
一. 自定义函数分类 当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数. 根据用户自定义函数类别分为以下三种: 1. UDF(User-Defined-Functi ...
- 三 Hive 数据处理 自定义函数UDF和Transform
三 Hive 自定义函数UDF和Transform 开篇提示: 快速链接beeline的方式: ./beeline -u jdbc:hive2://hadoop1:10000 -n hadoop 1 ...
随机推荐
- MySQL的GROUP_CONCAT函数
先根据如下语句生成测试表并填充数据 CREATE TABLE z ( a INT, b INT); INSERT INTO Z SELECT 1,200; INSERT INTO Z SELECT 1 ...
- 从a文件判断是否删除b文件中的行(sed示例)
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html test.xml文件很大,内容结构如下: <?xml v ...
- meterpreter持久后门
meterpreter持久后门 背景:meterpreter好是好,但有个大问题,只要目标和本机连接断开一次后就再也连不上了,需要再次用exploit打才行!!! 解决方案:在与目标设备的meterp ...
- MAC 地址(单播、组播、广播地址分类)
简介 一个制造商在生产制造网卡之前,必须先向 IEEE 注册,以获取到一个长度为 24bit 的厂商代码,也称为 OUI(Organizationally-Unique Identifier).制造商 ...
- 《Office 365开发入门指南教程》正式上线,限时优惠和邀请分享推广
我很高兴地通知大家,<Office 365 开发入门指南教程>已经正式在网易云课堂上线,你可以通过直接访问 https://aka.ms/office365devlesson 这个短地址 ...
- [PHP]算法-跳台阶问题的PHP实现
一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: 1.找规律 f(1)=1 f(2)=2 f(3)=3 f(4)=5 f( ...
- Linux-bc命令(21)
bc 命令是任意精度计算器语言,通常在linux下当计算器用. 它类似基本的计算器, 使用这个计算器可以做基本的数学运算. bc支持运算有以下几种: + - * / % :加,减,乘,除,取余 a^b ...
- Spring Bean的生命周期,《Spring 实战》书中的官方说法
连着两天的面试 ,都问到了 Spring 的Bean的生命周期,其中还包括 昨晚一波阿里的电话面试.这里找到了Spring 实战中的官方说法.希望各位要面试的小伙伴记住,以后有可能,或者是有时间 去看 ...
- javascript html页面中的内容替换
<script language="javascript"> function ffRed(){ var xsxf = document.getElementById ...
- C#设计模式之七桥接模式(Bridge Pattern)【结构型】
一.引言 今天我们要讲[结构型]设计模式的第二个模式,该模式是[桥接模式],也有叫[桥模式]的,英文名称:Bridge Pattern.大家第一次看到这个名称会想到什么呢?我第一次看到这个模式根据名称 ...