首页 > 其他分享 >Hive的用户自定义函数实现步骤与流程

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

时间:2023-05-29 10:39:12浏览次数:48  
标签:return 自定义 步骤 jar hive UDF Hive arguments


参考答案:

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
	*/
	@Override
	public 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
	*/
	@Override
	public Object evaluate(DeferredObject[] arguments) throws HiveException {
		if(arguments[0].get() == null) {
			return 0;
		}
		return arguments[0].get().toString().length();
	}

	@Override
	public 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;

标签:return,自定义,步骤,jar,hive,UDF,Hive,arguments
From: https://blog.51cto.com/u_15553407/6368139

相关文章

  • Flask010_自定义过滤器
    在模板中,通过过滤器实现对变量的处理。过滤器本质上是Python的函数,它会把被过滤器的值当作第1个参数传送给函数。自定义过滤器定义1defdatetime_format(value,format="%Y-%m-%d%H:%M"):2returnvalue.strftime(format)345app.add_template_filter(date......
  • Hive的分区、分桶
    Hive的分区表、分桶表一、 Hive库的分区表1.1概述Hive中的表对应为HDFS上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大。分区为HDFS上表目录的子目录,数据按照分区存储在子目录中。如果查询的where字句的中包含分区条件,则直接从该分区......
  • Java学习:使用MyBatis Plus的分页插件和QueryWrapper结合自定义mapper xml实现多表关联
     Vo:/***用来返回给前端展示列表的数据实体*/@DatapublicclassCourseVoimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privateStringid;privateStringtitle;privateStringsubjectParentTitle;private......
  • 二手房装修流程全步骤
     雅静说装修流程步骤 1,格局规划,设计拆改,提前定中央空调,新风 2,砸墙,砌墙,修补 3,安装中央空调,新风,约窗户量尺 4,封阳台,换窗户 5,水电改造,定好厨房电器位置尺寸,定好开关插座 6,做防水定地暖材料 7,包下水管,砌壁龛,定地砖 8,铺地暖,定吊顶材料......
  • Mybatis-plus中自定义的sql语句调用QueryWrapper实现查询
     一、引言MP自带的条件构造器虽然很强大,有时候也避免不了写稍微复杂一点业务的sql,那么今天说说MP怎么自定义sql语句吧。 二、具体实现使用注解实现:在我们Mapper接口中定义自定义方法即可。/***@Date:2019/6/1014:40*@Description</span>:User对象持久层*/p......
  • 普加项目管理中间件示例之三:自定义单元格样式,行样式,以及单元格内容
    通过监听处理"drawcell"事件,可以根据任务信息,设置行、单元格样式,以及自定义单元格Html内容。参考示例demo/DiyDisplay.html。代码如下:project.on("drawcell",function(e){vartask=e.record,column=e.column,field=e.field;//单元格样式if(column.name......
  • 普加项目管理中间件示例之四:自定义单元格可编辑
    通过监听处理"cellbeginedit"事件,可以控制每个行、每个单元格是否可编辑。参考示例:demo/DiyEditable.html代码如下://控制单元格是否可编辑project.on("cellbeginedit",function(e){vartask=e.record,column=e.column,field=e.field;//控制行,摘要任务不可编辑if......
  • 普加项目管理中间件示例之五:自定义条形图外观和提示信息
    可以通过监听drawitem事件来控制右侧条形图的html外观,达到任意的条形图效果。示例地址:demo/DiyDisplayGantt.html代码如下://1)自定义条形图外观显示project.on("drawitem",function(e){varitem=e.item;varleft=e.itemBox.left,top=e.itemBox.top,......
  • 普加项目管理中间件示例之六:自定义右键菜单
    弹出右键菜单时,根据当前选择的行,显示隐藏、启用禁用菜单项。示例地址:demo/DiyMenu.html代码如下://右键菜单弹出varmenu=newProjectMenu();project.setContextMenu(menu);menu.edit.on("click",function(e){ShowTaskWindow(project);});//监听菜单的opening事件,此......
  • hive优秀文章
    hiveserver2源码:转Hive源码分析——HiveServer2启动过程https://zhizhi.pcwanli.com/front/article/9514.html【原创】大数据基础之Hive(1)HiveSQL执行过程之代码流程  https://blog.csdn.net/weixin_30498807/article/details/98327011HiveServer2架构源码详解htt......