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

Hive学习——自定义函数UDFUDTF

目录

一、添加依赖

二、编写自定义UDF函数

(一)自定义首字母大写函数

1.java代码

2.hive中运行

(二)自定义字符串全部小写的函数

1.java代码

2.hive运行

(三)创建解析JSON字符串的函数

1.java代码

三、自定义编写UDTF函数

1.java编写

2.hive运行


        虽然Hive中内置了很多函数,但是Hive也给我们提供了自定义函数的接口,方便我们自定义函数进行调用,从而减少代码的编写量。

一、添加依赖

<dependencies><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>3.1.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.3</version></dependency><dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>3.1.2</version><exclusions><exclusion><groupId>org.glassfish</groupId><artifactId>javax.el</artifactId></exclusion><exclusion><groupId>org.eclipse.jetty</groupId><artifactId>jetty</artifactId></exclusion></exclusions></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>

二、编写自定义UDF函数

如果在hive中新建一个函数,断联后新函数就会丢失,所以需要在java中编写,打包后放入lib中。

(一)自定义首字母大写函数

1.java代码

import java.util.Locale;/*** 将传入的字符串,首字母变成大写字母*/
public class InitialString extends UDF {public static void main(String[] args) {InitialString ini = new InitialString();String hello = ini.evaluate("hello");System.out.println(hello);}public String evaluate(final String txt) {return txt.trim().substring(0, 1).toUpperCase(Locale.ROOT) + txt.substring(1);}
}

maven编译打包,放到hive的lib目录下

2.hive中运行

-- 加载jar包
hive (default)>add jar /opt/soft/hive312/lib/hivestu-1.0-SNAPSHOT.jar-- 创建函数
hive (default)> create temporary function myudf as 'test.udf.InitialString';-- 类的全路径-- 调用函数并输入参数
hive (default)> select myudf('hello');
Hellohive (default)> select myudf('hadoop');
Hadoophive (default)> select myudf('java');
Java

(二)自定义字符串全部小写的函数

1.java代码

import org.apache.hadoop.hive.ql.exec.UDF;public class LowerUDF extends UDF {public static void main(String[] args) {LowerUDF lowerUDF = new LowerUDF();String evaluate = lowerUDF.evaluate("HELLO", "JAVA");System.out.println(evaluate);}public String evaluate(final String txt, final String txt2) {String res = txt + "," + txt2;return res.toLowerCase();}
}

2.hive运行

hive (default)> create function mylower as 'test.udf.LowerUDF';hive (default)> select mylower('HELLO','JAVA');
hello,java

(三)创建解析JSON字符串的函数

1.java代码

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.json.JSONObject;/*** "15850500365|{"name":"zhangsan","age":50,"address":"上海"}"*/
public class ThreeUDF extends UDF {public static void main(String[] args) {ThreeUDF threeUDF = new ThreeUDF();String tel = threeUDF.evaluate("15850500365|{\"name\":\"zhangsan\",\"age\":50,\"address\":\"上海\"}", "address");System.out.println(tel);}public String evaluate(String line, String key) {String[] infos = line.split("\\|");if (infos.length != 2 || StringUtils.isBlank(infos[1])) {return "";}if (key.equals("tel")) {return infos[0];} else {JSONObject object = new JSONObject(infos[1].trim());if (key.equals("name") && object.has("name"))return object.getString("name");else if (key.equals("age") && object.has("age"))return object.getString("age");else if (key.equals("address") && object.has("address"))return object.getString("address");}return "nothave";}
}

三、自定义编写UDTF函数

1.java编写

import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;import java.util.ArrayList;
import java.util.List;/*** UDTF解决输入一行,输出多行的需求* 输入"hello,world,zhangsan,shanghai",","* 输出* world* hello* world* zhangsan* shanghai*/
public class MyUDTF extends GenericUDTF {private List<String> wordList = new ArrayList<String>();@Overridepublic StructObjectInspector initialize(StructObjectInspector argOIs)throws UDFArgumentException {/*** 输出数据类型说明:*/List<String> fieldNames = new ArrayList<String>();fieldNames.add("word");List<ObjectInspector> fieldOIs = new ArrayList<>();fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs);}@Overridepublic void process(Object[] args) throws HiveException {String data = args[0].toString();String splitkey = args[1].toString();String[] words = data.split(splitkey);for (String word :words) {wordList.clear();wordList.add(word);forward(wordList);}}@Overridepublic void close() throws HiveException {}
}

2.hive运行

hive (default)> create function myudtf as 'test.udtf.MyUDTF';hive (default)> select myudtf('aa,bb,cc,dd',',');
word
aa
bb
cc
ddhive (default)> select myudtf('aa$bb$cc$dd','$');
word
aa$bb$cc$ddhive (default)> select myudtf('aa$bb$cc$dd','\\$');
word
aa
bb
cc
dd

相关文章:

Hive学习——自定义函数UDFUDTF

目录 一、添加依赖 二、编写自定义UDF函数 (一)自定义首字母大写函数 1.java代码 2.hive中运行 (二)自定义字符串全部小写的函数 1.java代码 2.hive运行 (三)创建解析JSON字符串的函数 1.java代码 三、自定义编写UDTF函数 1.java编写 2.hive运行 虽然Hive中内置了…...

自学前端,你必须要掌握的3种定时任务

当你看到这篇博客的时候&#xff0c;一定会和狗哥结下不解之缘&#xff0c;因为狗哥的博客里不仅仅有代码&#xff0c;还有很多代码之外的东西&#xff0c;如果你可以看到最底部&#xff0c;看到投票环节&#xff0c;我相信你一定感觉到了&#xff0c;狗哥的真诚&#xff0c;狗…...

__stack_chk_fail问题分析

一、问题进程收到SIGABRT信号异常退出&#xff0c;异常调用栈显示__stack_chk_fail*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: Pico/A7H10/PICOA7H10:10/5.5.0/smartcm.1676912090:userdebug/dev-keys Revision: 0 ABI: arm64 Times…...

linux 查看当前系统用户

1.查看当前登录账号(whoami) whoami ---------------------- root2.查看当前账号信息(id) id --------------------------- uid0(root) gid0(root) groups0(root)3.查看/etc/passwd文件 可以看到每行记录对应着一个用户信息&#xff0c;每条记录 共7段 用 冒号: 拼接&#xf…...

AI算法创新赛-人车目标检测竞赛总结05

队伍&#xff1a;AI0000043 1. 算法方案 由于赛题同时要求速度和精度&#xff0c;所以我们优先考虑小模型&#xff0c;在保证模型速度的同时通过模型调优稳 定提升模型精度。此外&#xff0c;由于图片分辨率比较大&#xff0c;且数据集中小目标占比高&#xff0c;我们计划使用…...

CSS 浮动【快速掌握知识点】

目录 前言 一、设置浮动属性 二、确定浮动元素的宽度 三、清除浮动 总结&#xff1a; 前言 CSS浮动是一种布局技术&#xff0c;它允许元素浮动到其父元素的左侧或右侧&#xff0c;从而腾出空间给其他元素。 一、设置浮动属性 使用CSS float属性将元素设置为浮动。例如&…...

在做自动化测试前需要知道的

什么是自动化测试&#xff1f; 做测试好几年了&#xff0c;真正学习和实践自动化测试一年&#xff0c;自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念&#xff0c;广义上来讲&a…...

机器人学习的坚持与收获-2023

所有的机会都需要自己努力去争取&#xff0c;毕竟天会下雨下雪&#xff0c;但是不会掉馅饼。之前写过关于毕业生的一些博文。机器人工程ROS方向应用型本科毕业设计重点课题学生验收成果&#xff08;暂缓通过&#xff09;机器人工程ROS方向应用型本科毕业设计重点课题学生验收成…...

RSA签名加密解密

目录Java 接口RSAUtils.java示例中的依赖生成密钥对示例签名示例验证签名示例加密和解密示例Javascript 接口引入依赖生成密钥对示例签名示例验证签名示例加密和解密示例说在最后Java 接口 支持的密钥长度包括4种 RSA512、RSA1024、RSA2048、RSA4096支持的签名算法包括7种 MD2…...

【C语言】数据的存储

☃️内容专栏&#xff1a;【C语言】进阶部分 ☃️本文概括&#xff1a; C语言中的数据类型及其存储方式。 ☃️本文作者&#xff1a;花香碟自来_ ☃️发布时间&#xff1a;2023.2.24 目录 一、数据类型详细介绍 1.1 基本的数据类型 1.2 整型家族 1.3 构造类型 1.4 指针类型…...

「RISC-V Arch」SBI 规范解读(上)

术语 SBI&#xff0c;Supervisor Binary Interface&#xff0c;管理二进制接口 U-Mode&#xff0c;User mode&#xff0c;用户模式 S-Mode&#xff0c;Supervisor mode&#xff0c;监督模式 VS-Mode&#xff0c;Virtualization Supervisor mode&#xff0c;虚拟机监督模式 …...

2023年全国最新二级建造师精选真题及答案5

百分百题库提供二级建造师考试试题、二建考试预测题、二级建造师考试真题、二建证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 51.下列国有资金占控股或者主导地位的依法必须进行招标的项目&#xff0c;可以采取邀请招标的…...

365智能云打印怎么样?365小票无线订单打印机好用吗?

365智能云打印怎么样&#xff1f;365智能云打印是有赞官方首推的订单小票打印机&#xff0c;荣获2016年有赞最佳硬件服务商。可以实现远程云打印&#xff0c;无需连接电脑&#xff0c;只需通过GPRS流量或者WIFI即可连接&#xff0c;不受地理位置和距离限制。365小票无线订单打印…...

细说react源码中的合成事件

最近在做一个功能&#xff0c;然后不小心踩到了 React 合成事件 的坑&#xff0c;好奇心的驱使&#xff0c;去看了 React 官网合成事件 的解释&#xff0c;这不看不知道&#xff0c;一看吓一跳… SyntheticEvent是个什么鬼&#xff1f;咋冒出来了个事件池&#xff1f; 我就一…...

【架构师】零基础到精通——架构演进

博客昵称&#xff1a;架构师Cool 最喜欢的座右铭&#xff1a;一以贯之的努力&#xff0c;不得懈怠的人生。 作者简介&#xff1a;一名Coder&#xff0c;软件设计师/鸿蒙高级工程师认证&#xff0c;在备战高级架构师/系统分析师&#xff0c;欢迎关注小弟&#xff01; 博主小留言…...

Hadoop命令大全

HDFS分布式文件系统 &#xff0c; 将一个大的文件拆分成多个小文件存储在多台服务器中 文件系统&#xff1a; 目录结构&#xff08;树状结构&#xff09; "/" 树根&#xff0c; 目录结构在namenode中维护 目录 1.查看当前目录 2.创建多级目录 3.上传文件 4.查…...

一文带你快速初步了解云计算与大数据

目录 &#x1f50d;一、云计算基础 1、云计算的概念、特点、关键技术 2、云计算的分类 3、云计算的部署模式 4、云计算的服务模式&#xff1a;IaaS、PaaS、SaaS分别是什么&#xff0c;具体含义要清楚 5、物联网的概念 6、物联网和云计算、大数据的关系 7、了解云计算的…...

STM32 OTA应用开发——通过USB实现OTA升级

STM32 OTA应用开发——通过USB实现OTA升级 目录STM32 OTA应用开发——通过USB实现OTA升级前言1 环境搭建2 功能描述3 BootLoader的制作4 APP的制作5 烧录下载配置6 运行测试结束语前言 什么是OTA&#xff1f; 百度百科&#xff1a;空中下载技术&#xff08;Over-the-Air Techn…...

JavaScript高级程序设计读书分享之6章——6.2Array

JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 除了 Object&#xff0c;Array 应该就是 ECMAScript 中最常用的类型了。 创建数组 使用 Array 构造函数 在使用 Array 构造函数时&#xff0c;也可以省略 new 操作符。 let colors new Array() let …...

MySQL递归查询 三种实现方式

1 建表脚本1.1 建表DROP TABLE IF EXISTS sys_region; CREATE TABLE sys_region (id int(50) NOT NULL AUTO_INCREMENT COMMENT 地区主键编号,name varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 地区名称,short_name varchar(50) CHARA…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...