Hive自定义函数

 

 

本文章主要分享单行函数UDF(一进一出)

现在前面大体总结,后边文章详细介绍

自定义函数分为临时函数与永久函数

需要创建Java项目,导入hive依赖

创建类继承 GenericUDF(自定义函数的抽象类)(实现函数)

打成jar包,传到服务器上

将jar包添加到hive的class path上临时生效

通过hive创建函数与Java类建立连接

目录

hive底层运行:

编码:

(一) 创建Java-maven项目:

 (1)导入hive的maven依赖:

(2)创建Java类:

(3)实现Java类中的方法:

1.initialize

2.evaluate方法(要实现函数的核心逻辑)

构造hive函数:

(一)临时函数:

(二)创建永久函数

hive底层运行:

sql语句---》抽象语法树---》形成逻辑执行计划---》翻译成物理执行计划(可以是mapreduce   /  spark )

编码:

(一) 创建Java-maven项目:

 (1)导入hive的maven依赖:

<groupId>org.example</groupId><artifactId>hive-UDTF</artifactId><version>1.0-SNAPSHOT</version>

(2)创建Java类:

创建的Java类是继承自GenericUDF类(抽象类)

继承之后会实现3个函数(initialize,evaluate,getDisplayString)

(3)实现Java类中的方法:

1.initialize

这是一个初始化方法,在该函数的调用之前必须要调用一次

一般进行数据检验

    public ObjectInspector initialize(ObjectInspector[] objectInspectors) throws UDFArgumentException {

传入参数为:ObjectInspector[] objectInspectors

ObjectInspector[] 是一个存储源信息的ObjectInspector

处理后返回一个ObjectInspector 给下一个ObjectInspector[]进行处理

//1先取上一步的源信息// 先判断参数的个数if(objectInspectors.length!=1){throw new UDFArgumentLengthException("请输入1个参数");}ObjectInspector objectInspector=objectInspectors[0];
// 判断参数是否是基本数据类型if (objectInspectors[0].getCategory()!=ObjectInspector.Category.PRIMITIVE){throw new UDFArgumentLengthException("请输入一个基本数据类型");}//  假设是string类型(基础数据类型在)   强制类型转化进行判断//非指定类型就进行抛异常PrimitiveObjectInspector primitiveObjectInspector = (PrimitiveObjectInspector) objectInspector;if (primitiveObjectInspector.getPrimitiveCategory()!=PrimitiveObjectInspector.PrimitiveCategory.STRING){throw new UDFArgumentException("只接受string类型");}//返回的时候  需要找到基本数据类型的工厂   让后getInt类型return PrimitiveObjectInspectorFactory.javaIntObjectInspector;}

2.evaluate方法(要实现函数的核心逻辑)

每行数据调用一次

    public Object evaluate(DeferredObject[] deferredObjects) throws HiveException {

传入参数:DeferredObject[] deferredObjects

DeferredObject[]是一个懒加载的值(根据数组下标获取的值不是真值)需要get一下获得真值

 //DeferredObject[] deferredObjects、//获取的是每行数据中的指定列的参数(不用进行校验(init已完成校验否则不会调用此函数))//DeferredObject[]是一个懒加载的值  需要get一下获得真值DeferredObject arg=deferredObjects[0];Object o = arg.get();
//   o可能是空值nullif(o==null){return 0;}return o.toString().length();

构造hive函数:

(一)临时函数:

将Java编码成功后的代码进行打包(package)

打包后上传服务器

将jar包添加到hive的classpath,临时生效(临时函数)

add jar /opt/module/hive/datas/myudf.jar;

创建临时函数并于Java class相联:

create temporary function my_len 
as "com.atguigu.hive.udf.MyUDF";

注意:临时函数只跟会话有关系,跟库没有关系。只要创建临时函数的会话不断,在当前会话下,任意一个库都可以使用其他会话全都不能使用。

(二)创建永久函数:

创建永久函数前需要先将jar包上传到hdfs中,在hive语句中using该路径

create function my_len2 
as "com.atguigu.hive.udf.MyUDF" 
using jar "hdfs://hadoop102:8020/udf/myudf.jar";

函数的使用:

select my_len2("sdsrf");

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/5806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg新旧接口对比--记录

https://www.cnblogs.com/schips/p/12197116.html ffmpeg新旧函数对比_鲲鹏私董会的博客-CSDN博客ffmpeg 视频解码流程及对应API使用_ffmpeg调用流程_音视频开发老马的博客-CSDN博客 FFmpeg编程--解码流程_ffmpeg解码流程_贝勒里恩的博客-CSDN博客[总结]FFMPEG视音频编解码零基…

HP惠普暗影精灵9笔记本原装出厂Win11系统预装专用OEM系统镜像

暗影9笔记本电脑原厂Windows11系统包 OMEN by HP 16.1英寸游戏本16-wf0000,16-wf0001,16-wf0003,16-wf0004,16-wf0006,16-wf0008,16-wf0009,16-wf0010,16-wf0011,16-wf0012,16-wf0028,16-wf0029,16-wf0007,16-wf0032,16-wf0036,16-wf0043 链接&#xff1a;https://pan.baidu.…

[SQL系列] 从头开始学PostgreSQL 自增 权限和时间

[SQL系列] 从头开始学PostgreSQL 事务 锁 子查询_Edward.W的博客-CSDN博客https://blog.csdn.net/u013379032/article/details/131841058上一篇介绍了事务&#xff0c;锁&#xff0c;子查询 事务有点像是原子操作&#xff0c;需要有完整性&#xff0c;要么全都完成了&#xff…

win11我们无法创建新的分区也找不到现有的分区

U盘重装系统的时候 提示&#xff1a;win11我们无法创建新的分区也找不到现有的分区 ShiftF10 &#xff0c;调出 命令提示符&#xff1b; diskpart list disk select disk 盘编号 clean convert gpt 参考&#xff1a;怎么解决我们无法创建新的分区也找不到现有的分区问题&#x…

STM32F407-- DMA使用

目录 1. DMA结构体 STM32F103&#xff1a; STM32F407&#xff1a; 2. F4系列实现存储器到存储器数据传输 1&#xff09;结构体配置&初始化 2&#xff09;主函数 补充知识点&#xff1a;关于变量存储的位置&#xff0c;关于内部存储器一般存储什么内容 3. F4系列实现…

C++OpenCV(4):图像截取与掩膜操作

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 &#x1f506; OpenCV项目地址及源代码&#xff1a;点击这里 文章目录 图像截取图像掩膜操作 图像截取 ROI操作&#xff0c;指的是&#xff1a;region of interest&#xff0c;感兴趣区域。 我们可以对一张…

Android Studio 修改AVD模拟器文件默认存储路径

AndroidStudio默认的模拟器文件路径为&#xff1a;C:\Users\用户名\.android\avd路径&#xff0c;通常windows系统上&#xff0c;C盘不是太大&#xff0c;而avd文件却不小&#xff0c;通常几个GB&#xff0c;所以有必要将avd路径换到一个非系统盘。 更换方法如下&#xff1a;H…

LocalDateTime、OffsetDateTime、ZonedDateTime之间的关系

什么是LocalDateTime&#xff1f; ISO-8601日历系统中不带时区的日期时间。 该类不存储时区&#xff0c;所以适合日期的描述&#xff0c;比如用于生日、deadline等等。 但是如果没有偏移量/时区等附加信息&#xff0c;一个时间是不能表示时间线上的某一时刻的。 什么是Offset…

20230720在ubuntu22.04系统下载+解密+合并ts切片的步骤(STEP-BY-STEP版本)

20230720在ubuntu22.04系统下载解密合并ts切片的步骤&#xff08;STEP-BY-STEP版本&#xff09; 2023/7/20 23:06 https://app1ce7glfm1187.h5.xiaoeknow.com/v2/course/alive/l_64af6130e4b03e4b54da1681?type2&app_idapp1cE7gLFM1187&pro_idterm_645c69388953e_Nhew…

论文工具——ChatGPT结合PlotNeuralNet快速出神经网络深度学习模型图

文章目录 引言正文PlotNeuralNet安装使用使用python进行编辑使用latex进行编辑 样例利用chatGPT使用chatGPT生成Latex代码利用chatGPT生成对应的python代码 总结引用 引言 介绍如何安装PlotNeuralNet工具&#xff0c;并结合chatGPT减少学习成本&#xff0c;快速出图。将按照软…

前端Web实战:从零打造一个类Visio的流程图拓扑图绘图工具

前言 大家好&#xff0c;本系列从Web前端实战的角度&#xff0c;给大家分享介绍如何从零打造一个自己专属的绘图工具&#xff0c;实现流程图、拓扑图、脑图等类Visio的绘图工具。 你将收获 免费好用、专属自己的绘图工具前端项目实战学习如何从0搭建一个前端项目等基础框架项…

java学习(二):反射

系列文章目录 https://editor.csdn.net/md/?articleId131757340 文章目录 系列文章目录参考【1】注解1. 什么是注解2. 内置注解3. 元注解4.自定义注解 【2】反射--基本概念一、反射的基本概念1. 为什么要用反射&#xff1f;2. 什么是反射&#xff1f;3. 用和不用反射的区别&a…

代码随想录-回溯(组合问题)|ACM模式

目录 前言&#xff1a; 77.组合 题目描述&#xff1a; 输入输出示例&#xff1a; 思路和想法&#xff1a; 216. 组合总和 III 题目描述&#xff1a; 输入输出示例&#xff1a; 思路和想法&#xff1a; 17. 电话号码的字母组合 题目描述&#xff1a; 输入输出描述&a…

内置对象定时器参考

内置对象 Array 数组 1. 创建 var arr [];2. 特点 数组用于存储若干数据,自动为每位数据分配下标,从0开始数组中的元素不限数据类型,长度可以动态调整动态操作数组元素 &#xff1a;根据元素下标读取或修改数组元素&#xff0c;arr[index] 3. 属性和方法 属性 : length 表…

MyBatis的多表操作

1 MyBatis的多表操作 1.1 多表模型介绍 我们之前学习的都是基于单表操作的&#xff0c;而实际开发中&#xff0c;随着业务难度的加深&#xff0c;肯定需要多表操作的。 多表模型分类 一对一&#xff1a;在任意一方建立外键&#xff0c;关联对方的主键。 一对多&#xff1a;在…

实用便捷!一站式BI系统推荐

在企业数字化转型过程中&#xff0c;BI系统可以建立业务、数据的双驱引擎&#xff0c;形成业务、数据的互补作用&#xff0c;通过建立数字化技术架构&#xff0c;明确企业的战略定位和业务目标&#xff0c;从而支撑实现这个目标。而一站式BI系统&#xff0c;则是指可以轻松从数…

JavaScript面向对象介绍、创建对象的方式、构造函数的使用、构造函数的不合理、原型

一、面向对象介绍 1.了解面向对象 面向对象是我们的一种开发方式 面向过程: 一种关注过程的开发方式> 在开发过程中, 我们要关注每一个细节, 步骤, 顺序 面向对象: 一种面向对象的开发方式> 在开发过程中, 我们看看有没有一个对象能帮我们完成任务例子: 一份烤鸭 面向过程…

【学习记录】MindVersion工业摄像头调试

前一阵调试了新到的一大批设备&#xff0c;其中只有工业摄像头没有提供官方的ROS驱动&#xff0c;只有一个官方的SDK&#xff0c;在github上找到了之前师兄写的一个旧版本的ROS驱动&#xff0c;但是调试过程一直显示连接不上摄像头&#xff0c;错误信息类似于下面这样&#xff…

2023深圳杯/东三省A题B题C题数学建模思路代码

本次2023深圳杯数学建模我们会全程提供主供&#xff0c;包括思路代码模型&#xff0c;请关注我们&#xff01; 详情查看文末&#xff01; A题思路&#xff1a; &#xff08;比赛开始后第一时间发布&#xff09; B题思路&#xff1a; &#xff08;比赛开始后第一时间发布&…

C++11:新特性(总结+实例)

C11是C语言的一个重要版本&#xff0c;引入了许多新的特性和语法改进&#xff0c;使得C编程更加方便、高效和安全。下面是一些C11的新特性和实例的详解。 1、自动类型推断&#xff08;auto&#xff09; C11引入了auto关键字&#xff0c;用于自动推断变量的类型。这样可以简化代…