大数据全系列 教程
1869个小节阅读:467.8k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
对手机号码列进行数据脱敏 13834564321->1384321
1、UDF函数可以直接应用于select语句,对查询结构做格式化处理后,再输出内容。
2、编写UDF函数的时候需要注意一下几点:
a)自定义UDF需要继承org.apache.hadoop.hive.ql.UDF。
b)需要实现evaluate函数,evaluate函数支持重载。
具体实现:
创建一个maven项目hivedemo
添加hive的依赖
xxxxxxxxxx
<dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies>
创建类TuoMin
xxxxxxxxxx
package com.itbaizhan.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class TuoMin extends UDF {
public Text evaluate(final Text tt){
if(tt==null){
return null;
}
//获取手机号码
String phone = tt.toString();
//脱敏处理
String result = phone.substring(0,3)+"****"+phone.substring(7);
return new Text(result);
}
}
将项目打成jar包,将jar包改名为hive1.jar
将hive1.jar上传到node4的/root/data目录下
进入hive客户端,添加jar
xxxxxxxxxx
hive> add jar /root/data/hive1.jar;
Added [/root/data/hive1.jar] to class path
Added resources: [/root/data/hive1.jar]
hive> list jar;
/root/data/hive1.jar
创建函数
xxxxxxxxxx
hive>create temporary function tuomin as 'com.itbaizhan.udf.TuoMin';
使用测试:
xxxxxxxxxx
hive> select tuomin('13812345678') from dual;
OK
138****5678
Time taken: 6.298 seconds, Fetched: 1 row(s)
删除临时函数
xxxxxxxxxx
drop temporary function tuomin;
执行:
xxxxxxxxxx
hive> drop temporary function tuomin;
OK
Time taken: 0.043 seconds
hive> select tuomin('13812345678') from dual;
FAILED: SemanticException [Error 10011]: Invalid function tuomin
将hive1.jar上传到hdfs文件系统中的/usr
xxxxxxxxxx
[root@node4 data]# hdfs dfs -put /root/data/hive1.jar /usr
2021-11-19 10:20:10,819 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
[root@node4 data]# hdfs dfs -ls /usr
-rw-r--r-- 3 root supergroup 2427 2021-11-19 10:20 /usr/hive1.jar
使用hdfs文件系统/usr/hive1.jar创建临时函数
xxxxxxxxxx
hive> create temporary function tuomin as 'com.itbaizhan.udf.TuoMin' using jar 'hdfs://mycluster/usr/hive1.jar';
Added [/tmp/fe5aa6ff-e7c3-48f6-bc25-6a3f7cf29eb9_resources/hive1.jar] to class path
Added resources: [hdfs://mycluster/usr/hive1.jar]
OK
Time taken: 0.133 seconds
测试:
xxxxxxxxxx
hive> select tuomin('13912345678') from dual;
OK
139****5678
Time taken: 0.366 seconds, Fetched: 1 row(s)
多行进一行出,如sum()、min(),用在group by时
1.必须继承
2.Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函数