当前位置: 首页 > news >正文

HIVE创建UDF函数全流程

今天做一期分享Hive的UDF函数和使用的的整个过程

文章目录

  • 场景
  • 建立Maven工程
  • Hive中函数注册及使用

场景

业务需求,想要实现姓名的脱敏
一个字的姓名,提示“单字姓名无法映射”
两个字的,加密后一位,例如:张三,张*
三个字及以上的保留第一位和最后一位

针对此场景一个好的udf实现,即可万事大吉

建立Maven工程

pom文件导入必要依赖hive-exec和hive-common,我的是Hive3.1.2,请根据自己的HIve版本导入依赖,具找依赖可以到以下链接找寻
Maven Repository
以下为我的pom文件的依赖

<dependencies><!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec --><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>3.1.2</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hive/hive-common --><dependency><groupId>org.apache.hive</groupId><artifactId>hive-common</artifactId><version>3.1.2</version></dependency>
</dependencies>

编写Java代码,继承GenericUDF类,重写initialize、evaluate、getDisplayString三个方法
以下是我的Java代码,定义了一个JiamiFunction类

package com.brilliance;
import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector;/*** @author chad* @since 2025/8/25*/
public class JiamiFunction extends GenericUDF{private StringObjectInspector stringInspector;@Overridepublic ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {if (arguments.length != 1) {throw new UDFArgumentLengthException("该函数只接受1个参数");}stringInspector = (StringObjectInspector) arguments[0];return PrimitiveObjectInspectorFactory.javaStringObjectInspector;}@Overridepublic Object evaluate(GenericUDF.DeferredObject[] arguments) throws HiveException {String name = stringInspector.getPrimitiveJavaObject(arguments[0].get());if (name == null || name.trim().isEmpty()) {return "数据为空无法映射";}name = name.trim();if (!name.matches("^[\u4e00-\u9fa5]+$")) {return "非汉字姓名无法处理";}int length = name.length();if (length == 1) {return "单字姓名无法映射";} else if (length == 2) {return name.charAt(0) + "*";} else {return name.charAt(0) + "**" + name.charAt(length - 1);}}@Overridepublic String getDisplayString(String[] children) {return "姓名脱敏函数";}
}

写完这个类之后,就可以打包了,点击打包,生成一个jar包
在这里插入图片描述
上传jar包到hdfs,随便放到一个目录,我的放在以下位置
在这里插入图片描述

Hive中函数注册及使用

在Hive中执行以下命令
加载jar包

add jar hdfs:///udfs/jiami.jar;

创建函数

CREATE FUNCTION day02_hive.to_namejiamiAS 'com.brilliance.JiamiFunction'USING JAR 'hdfs:///udfs/jiami.jar';

效果展示,我的Hive中创建了一张表hero,其中有一列为name,查询如下
在这里插入图片描述
使用我刚才创建的udf函数后

select name,to_namejiami(name)
from hero;

在这里插入图片描述
效果实现,希望我的分享可以帮助到你

http://www.dtcms.com/a/350254.html

相关文章:

  • 【URP】Unity 插入自定义RenderPass
  • 【学习记录】CSS: clamp、@scope
  • C++ extern 关键字面试深度解析
  • 大模型的思考方式
  • 引脚电平异常?以下或许是原因
  • Java 高可用实现方式
  • 基于MATLAB长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析等领域中的实践技术应用
  • 面试常考算法题汇总
  • Java设计模式-观察者模式
  • MATLAB函数文件编写规范
  • imx6ull-驱动开发篇41——Linux RTC 驱动实验
  • 详解flink SQL基础(四)
  • 使用Docker+WordPress部署个人博客
  • 无人机和无人系统的计算机视觉-人工智能无人机
  • k8s的etcd备份脚本
  • 4G模块 EC200通过MQTT协议连接到阿里云
  • Java-面试八股文-Java高级篇
  • Springboot 集成 TraceID
  • 在react里使用路由,手动跳转
  • C++ 内存安全与智能指针深度解析
  • 【flutter对屏幕底部有手势区域(如:一条横杠)导致出现重叠遮挡】
  • YOLOv7:重新定义实时目标检测的技术突破
  • 浅聊RLVR
  • 绿色循环经济下的旧物回收App:重构闲置资源的价值链条
  • 设计仿真 | 从物理扫描到虚拟检具:Simufact Welding革新汽车零部件检测
  • 汽车零部件工厂ESOP系统工业一体机如何选型
  • 基于51单片机红外避障车辆高速汽车测速仪表设计
  • AEB 强制来临,东软睿驰Next-Cube-Lite有望成为汽车安全普惠“破局器”
  • kubeadm join 命令无法加入node节点,ip_forward 内核参数没有被正确设置
  • IIS 安装了.netcore运行时 还是报错 HTTP 错误 500.19