Hive的用户自定义函数实现步骤与流程

news/2024/11/22 13:14:35/

面试题来源:

《大数据面试题 V4.0》

大数据面试题V3.0,523道题,679页,46w字

参考答案:

1、如何构建UDF?

用户创建的UDF使用过程如下:

第一步:继承UDF或者UDAF或者UDTF,实现特定的方法;

第二步:将写好的类打包为jar,如hivefirst.jar;

第三步:进入到Hive外壳环境中,利用add jar /home/hadoop/hivefirst.jar注册该jar文件;

第四步:为该类起一个别名,create temporary function mylength as 'com.whut.StringLength',这里注意UDF只是为这个Hive会话临时定义的;

第五步:在select中使用mylength()。

2、函数自定义实现步骤

1)继承Hive提供的类

org.apache.hadoop.hive.ql.udf.generic.GenericUDF 
org.apache.hadoop.hive.ql.udf.generic.GenericUDTF

2)实现类中的抽象方法

3)在 hive 的命令行窗口创建函数添加 jar

add jar linux_jar_path 	
# 创建 function
create [temporary] function [dbname.]function_name AS class_name; 

4)在 hive 的命令行窗口删除函数

drop [temporary] function [if exists] [dbname.]function_name;

3、自定义UDF案例

1)需求

自定义一个UDF实现计算给定字符串的长度,例如:

hive(default)> select my_len("abcd"); 
4

2)导入依赖

<dependencies><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>3.1.2</version></dependency>
</dependencies>

3)创建一个类,继承于Hive自带的UDF

/**
* 自定义 UDF 函数,需要继承 GenericUDF 类
* 需求: 计算指定字符串的长度
*/
public class MyStringLength extends GenericUDF {/****@param arguments 输入参数类型的鉴别器对象* @return 返回值类型的鉴别器对象*@throws UDFArgumentException*/@Overridepublic ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {// 判断输入参数的个数if(arguments.length !=1) {throw new UDFArgumentLengthException("Input Args Length Error!!!");}
// 判断输入参数的类型if(!arguments[0].getCategory().equals(ObjectInspector.Category.PRIMITIVE)) {throw new UDFArgumentTypeException(0,"Input Args Type Error!!!");}
//函数本身返回值为 int,需要返回 int 类型的鉴别器对象return PrimitiveObjectInspectorFactory.javaIntObjectInspector;}/*** 函数的逻辑处理*@param arguments 输入的参数*@return 返回值*@throws HiveException*/@Overridepublic Object evaluate(DeferredObject[] arguments) throws HiveException {if(arguments[0].get() == null) {return 0;}return arguments[0].get().toString().length();}@Overridepublic String getDisplayString(String[] children) {return "";}
}

4)打成jar包上传到服务器/opt/module/data/myudf.jar

5)将jar包添加到hive的classpath

hive (default)> add jar /opt/module/data/myudf.jar; 

6)创建临时函数与开发好的java class关联

7)即可在hql中使用自定义的函数

hive (default)> select ename,my_len(ename) ename_len from emp;


http://www.ppmy.cn/news/82989.html

相关文章

关于空洞填充和求重心

来自你的消息: opencv如何时间填充空洞算法&#xff1f; 来自ChatAI的消息: OpenCV中有两种常用的空洞填充算法&#xff0c;分别是基于形态学操作和基于图像分割的方法。下面我将介绍这两种算法的实现方法&#xff1a; 形态学操作 形态学操作是基于图像形态学理论的一种像…

Spring之路——深入理解与实现IOC依赖查找与依赖注入

本文从xml开始讲解&#xff0c;注解篇后面给出 文章目录 1. 一个最基本的 IOC 依赖查找实例2. IOC 的两种实现方式2.1 依赖查找&#xff08;Dependency Lookup&#xff09;2.2 依赖注入&#xff08;Dependency Injection&#xff09; 3. 在三层架构中的 service 层与 dao 层体会…

北邮22信通:二叉树显示路径的两种方法 递归函数保存现场返回现场的实例

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 获取更多文章 请访问专栏~ 北邮22信通_青山如墨雨如画的博客-CSDN博客 一.讲解 要想实现二叉树的路径显示&#xff0c;我们要按照…

深入理解 go sync.Waitgroup

本文基于 Go 1.19。 go 里面的 WaitGroup 是非常常见的一种并发控制方式&#xff0c;它可以让我们的代码等待一组 goroutine 的结束。 比如在主协程中等待几个子协程去做一些耗时的操作&#xff0c;如发起几个 HTTP 请求&#xff0c;然后等待它们的结果。 WaitGroup 示例 下面…

msvcr110.dll丢失的解决方法,多种方法助你解决msvcr110.dll丢失

当您在尝试打开某个程序或游戏时&#xff0c;可能会看到一个错误消息&#xff0c;提示您的计算机缺少msvcr110.dll文件。这是因为该文件是Microsoft Visual C Redistributable库的一部分&#xff0c;缺少它可能会导致应用程序无法正常运行。在本文中&#xff0c;我们将详细介绍…

TS入门(TS类型有哪些?怎么使用?)

TS简介 TS&#xff08;TypeScript&#xff09;是一种由微软开发的开源编程语言&#xff0c;它是 JavaScript 的超集&#xff0c;能够为 JavaScript 添加静态类型检查和面向对象编程的特性。TS 可以在编译时进行类型检查&#xff0c;从而提高代码的可读性、可维护性和可靠性&am…

LeetCode高频算法刷题记录7

文章目录 1. 下一个排列【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 两数相加【中等】2.1 题目描述2.2 解题思路2.3 代码实现 3. 括号生成【中等】3.1 题目描述3.2 解题思路3.3 代码实现 4. 滑动窗口最大值【困难】4.1 题目描述4.2 解题思路4.3 代码实现 5. 最小覆盖子串…

Go语言面试题--必会语法(1)

文章目录 1.下面这段代码输出什么&#xff1f;2.下面代码输出什么&#xff1f;3.同级文件的包名不允许有多个&#xff0c;是否正确&#xff1f;4.下面的代码有什么问题&#xff0c;请说明。 1.下面这段代码输出什么&#xff1f; func main() {count : 0for i : range [256]str…