Hive--自定义函数

Hive 自定义函数 导读 大家好,我是数据开发者,非常感谢大家最近的关注,你们的关注是我持续输出的动力,让我们共同提高。 大数据平台下的数据仓库搭建过程中存在许多个性化的业务需求,或者说是系统需求,无法在 Hive 提供的内置函数中找到解决办法,为了解决这个问题,我们可以使用 Hive 自定义函数满足这种个性化需求。我们本篇就使用 Hive 中的自定义函数实现几种数仓搭建过程中的需求。 Hive 有哪些自定义函数? Hive 中存在三种类型的函数,分别是 UDF, UDAF, UDTF,这三种类型的 UDF 分别是: UD 阅读详情

http://www.cnblogs.com/end/archive/2012/06/18/2553682.html

6  自定义函数

1. UDF

UDF(user defined function),即用户自定义函数,接受单行输入,并产生单行输出。
步骤如下:

1)自定义一个Java类并继承org.apache.hadoop.hive.ql.exec.UDF类

2)重写evaluate方法


下面来做一个演示:

编写java类:

package com.wv.hive.udf;

import org.apache.hadoop.hive.ql.exec.UDF;

public class HelloUDF extends UDF {
	public String evaluate(String str) {
		return "helloUDF" + str;
	}
}

打成helloudf.jar,并传到hive客户端的/home/hadoop目录下

在hive cli中添加jar,并创建模板函数:

hive (default)> add jar /home/hadoop/helloudf.jar;
Added [/home/hadoop/helloudf.jar] to class path
Added resources: [/home/hadoop/helloudf.jar]
hive (default)> create temporary function helloudf as 'com.wv.hive.udf.HelloUDF';
OK
Time taken: 0.013 seconds

验证该函数是否可以使用:

hive (default)> select helloudf(t.name) from test t;
OK
helloUDFwang
helloUDFliu
helloUDFzhao
Time taken: 0.12 seconds, Fetched: 3 row(s)

使用完helloudf函数后,可以使用如下命令来删除:drop temporary function helloudf;

2. UDAF

UDAF(user defined aggregation function),即用户自定义聚合函数,接受多行输入,并产生单行输出。比如MAX,COUNT函数。

1)编写resolver类,resolver类负责类型检查,操作符重载。

继承抽象类org.apache.hadoop.hive.ql.udf.generic.AbstractGenericUDAFResolver,或者实现接口org.apache.hadoop.hive.ql.udf.GenericUDAFResolver2

2)编写evaluator类,evaluator真正实现UDAF的逻辑。

继承org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator。


在GenericUDAFEvaluator类中有一个内部枚举类:Mode,它表示了UDAF在mapreduce的各个阶段,理解Mode的含义,就可以理解hive的UDAF的运行流程。

public static enum Mode {
    /**
     * PARTIAL1: 这个是mapreduce的map阶段:从原始数据到部分数据聚合
     * 将会调用iterate()和terminatePartial()
     */
    PARTIAL1,
        /**
     * PARTIAL2: 这个是mapreduce的map端的Combiner阶段,负责在map端合并map的数据::从部分数据聚合到部分数据聚合:
     * 将会调用merge() 和 terminatePartial() 
     */
    PARTIAL2,
        /**
     * FINAL: mapreduce的reduce阶段:从部分数据的聚合到完全聚合 
     * 将会调用merge()和terminate()
     */
    FINAL,
        /**
     * COMPLETE: 如果出现了这个阶段,表示mapreduce只有map,没有reduce,所以map端就直接出结果了:从原始数据直接到完全聚合
      * 将会调用 iterate()和terminate()
     */
    COMPLETE
  };

编写一个实例:

package com.wv.hive.udaf;

import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.parse.SemanticException;
import org.apache.hadoop.hive.ql.udf.generic.AbstractGenericUDAFResolver;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import org.apache.hadoop.io.LongWritable;

public class CountBigThan extends AbstractGenericUDAFResolver {

	// 参数类型检查
	@Override
	public GenericUDAFEvaluator getEvaluator(TypeInfo[] info)
			throws SemanticException {
		if (info.length != 2) {
			throw new UDFArgumentTypeException(info.length - 1,
					"Exactly two argument is expected.");
		}
		// 返回自定义的逻辑处理类
		return new GenericUDAFCountBigThanEvaluator();
	}

	// 自定义的逻辑处理类
	public static class GenericUDAFCountBigThanEvaluator extends
			GenericUDAFEvaluator {

		private LongWritable result;// 保存最终结果
		private PrimitiveObjectInspector inputIO1;
		private PrimitiveObjectInspector inputIO2;

		/*
		 * map和reduce阶段都会执行init方法
		 * map阶段:parameter长度与udaf输入的参数个数有关
		 * reduce阶段:parameter长度为1
		 */
		@Override
		public ObjectInspector init(Mode m, ObjectInspector[] parameters)
				throws HiveException {
			super.init(m, parameters);

			// 最终结果
			result = new LongWritable(0);

			inputIO1 = (PrimitiveObjectInspector) parameters[0];

			if (parameters.length > 1) {
				inputIO2 = (PrimitiveObjectInspector) parameters[1];
			}

			return PrimitiveObjectInspectorFactory.writableLongObjectInspector;
		}

		@Override
		// map阶段执行
		public void iterate(AggregationBuffer agg, Object[] parameters)
				throws HiveException {
			assert (parameters.length == 2);

			if (parameters == null || parameters[0] == null
					|| parameters[1] == null) {
				return;
			}

			double base = PrimitiveObjectInspectorUtils.getDouble(
					parameters[0], inputIO1);
			double tmp = PrimitiveObjectInspectorUtils.getDouble(parameters[0],
					inputIO2);

			if (base > tmp) {
				((CountAgg) agg).count++;
			}
		}

		@Override
		// 保存一些聚合缓存结果
		public AggregationBuffer getNewAggregationBuffer() throws HiveException {
			CountAgg countAgg = new CountAgg();
			reset(countAgg);
			return countAgg;
		}

		public static class CountAgg implements AggregationBuffer {
			long count;
		}

		@Override
		public void reset(AggregationBuffer countAgg) throws HiveException {
			CountAgg agg = (CountAgg) countAgg;
			agg.count = 0;
		}

		@Override
		public Object terminatePartial(AggregationBuffer agg)
				throws HiveException {
			// 将result值设为CountAgg.cout
			result.set(((CountAgg) agg).count);
			// 返回result
			return result;
		}

		@Override
		public void merge(AggregationBuffer agg, Object partial)
				throws HiveException {
			//将从terminatePartial方法返回的结果和缓存区中的结果相加
			if (partial != null) {
				long p = PrimitiveObjectInspectorUtils.getLong(partial,
						inputIO1);
				((CountAgg) agg).count += p;
			}
		}

		@Override
		public Object terminate(AggregationBuffer agg) throws HiveException {
			// 将result值设为CountAgg.cout
			result.set(((CountAgg) agg).count);
			// 返回result
			return result;
		}

	}

}



Hive查询之自定义函数 Hive查询之自定义函数 1 自定义函数流程 1)Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便 的扩展。 2)当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数 (UDF:user-defined function)。 3)根据用户自定义函数类别分为以下三种: (1)UDF(User-Defined-Function) ​ 一进一出 (2)UDAF(User-Defined Aggregation Funct 阅读详情

相关推荐

Hive 自定义UDF函数

在使用hive中,有时要根据业务需求自定义一些函数,下面是自定义函数的步骤 1.新建一个maven项目,在项目的pom文件中引入依赖 <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</a...

muyingmiao的专栏 671

Hive

一、hive简介        1. Hive 是建立在 Hadoop  上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL ),这是一种可以存储、查询和分析存储在 Hadoop  中的大规模数据的机制。Hive 定义了简单的类 SQL  查询语言,称为 QL ,它允许熟悉 SQL  的用户查询数据。      2. Hive是SQL解析引擎,它将SQL语句转

王帆的专栏 1260

(P2)PALM软件的基本使用流程

上一篇介绍了PALM在Ubuntu系统上的下载安装及安装后的目录文件结构,这一篇以自带的案例介绍软件的基本操作流程。(请转至example_cbl项目) 输入 声明:官网均有各个变量的说明,以下代码来自软件自带案例 palm的最小输入文件是p3d文件,以下是example_cbl_p3d的详细说明。(文件语言格式Fortran,请自行先学习下语言的基本语法。笔者也是新学者,有非常多的问题,很多参数也不能准确的说出是什么意思,还请不吝赐教,谢谢!!!) !几点说明 !1、该运行文件基本由三大块组成:1)in

ysqzhatian的博客 3260

Hive 混合函数 UDTF UDF UDAF详解

混合函数可以使用java中的方法java_method(class,method[,arg1[,arg2...]])或者reflectHive版本1.2.1UDTF 用户定义表函数(表函数)一行变成多行配合lateral viewhive的Lateralviewhttp://blog.sina.com.cn/s/blog_7e04e0d00101csic.htmlUDF 重...

weixin_34315485的博客 264

绿标短网址app.10086.cn/xxxxx移动短网址缩短接口网址api调用php方式解析

绿标短网址app.10086.cn/xxxxx 移动网缩短接口网址api调用php方式解析 app.10086.cn是移动网站的接口,可以制作移动网等第三方官方网站域名的任意生成接口,由于是认证企业,可以再抖音 微信 qq等第三方渠道正常打开不拦截提示,第三方网址,头条文章等,效果非常号,这里记录下api接口,纯技术php生成,具体规则可以去抖音的开放平台去申请对应接口 。这里用我php模拟抓包获取方式 GET http://www.app10086cn.cn/?i=app.10068.cnHTTP/1.1

qq_20300095的博客 5911

Seafile搭建以及onlyoffice在线办公

部署seafile docker-compose.yml 如下: 参考此篇文章 version: '2.0' services: db: image: mariadb:10.1 container_name: seafile-mysql environment: - MYSQL_ROOT_PASSWORD=db_dev # mysql root的密码,同时修改 seafile的DB_ROOT_PASSWD与这个一致 - MYSQL_LOG_CONSOLE

dwdcth的专栏 4659

hive自定义函数学习

1介绍 Hive自定义函数包括三种UDF、UDAF、UDTF UDF(User-Defined-Function) 一进一出 UDAF(User- Defined Aggregation Funcation) 聚集函数,多进一出。Count/max/min UDTF(User-Defined Table-Generating Functions) 一进多出,如lateral view e...

weixin_30405421的博客 862

从CTFShow靶场实战,聊聊Node.js原型链污染漏洞的几种利用姿势(附详细复现步骤)

本文深入剖析Node.js原型链污染漏洞的原理与实战利用,通过复现CTFShow靶场题目(web338-web341),详细演示五种高级利用技巧,包括基础污染、多级污染、模板引擎RCE等,并提供防御方案与最佳实践,帮助开发者提升Web应用安全性。

weixin_30791095的博客 449

大数据---29.Hive 自定义函数

Hive 自定义函数(临时函数和永久函数)

u014579001的博客 4561

基于AT32F421的紧凑型FOC电机驱动板设计

磁场定向控制(FOC)是永磁同步电机(PMSM)与无刷直流电机(BLDC)实现高精度转矩控制和高效运行的核心技术,其本质是通过Clarke/Park坐标变换解耦定子电流,实现d轴磁链与q轴转矩的独立调节。该技术依赖实时性严苛的电流采样、高精度位置反馈及确定性PWM生成,广泛应用于机器人关节、智能装备等中小功率伺服场景。国产Cortex-M4微控制器(如AT32F421)凭借集成ADC、高级定时器与DSP指令集,已成为低成本、高可靠FOC嵌入式实现的理想平台。本文围绕一款工程化FOC驱动板展开,涵盖低侧电流采

weixin_42510243的博客 707

[QMT量化交易小白入门]-104、QMT平台运行深度学习模型,预测期货价格

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 487

hive的3种自定义函数

hive自定义函数 1 自定义函数 1.1 为什么需要自定义函数 hive的内置函数满足不了所有的业务需求。 hive提供很多的模块可以自定义功能,比如:自定义函数、serde、输入输出格式等。 1.2 常见自定义函数有哪些 UDF:用户自定义函数,user defined function。一对一的输入输出。(最常用的)。 UDTF:用户自定义表生成函数。user defined table...

Aidon博客 1万+

一文读懂 SAP Web Dispatcher 配置参考:让 Gateway、OData 与后端服务各走各路

SAP Web Dispatcher在Fiori项目中常被低估,实际上它作为企业系统的HTTP(s)入口,承担着流量分发和安全防护双重职责。该组件通过URL路径规则(如/sap/opu/odata/转发至Gateway系统)实现多系统路由,隐藏后端复杂性,提供统一访问入口。配置要点包括HTTPS参数设置、客户端证书转发、端口定义以及系统冲突处理策略。合理的配置能确保前端统一访问、网络边界清晰可控,同时降低跨团队协作成本。生产环境需根据实际网络架构调整官方示例配置。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 157

Hive自定义函数

十、Hive自定义函数 1.自定义函数步骤 2.自定义UDF函数 3.自定义UDTF函数

扛麻袋的少年的博客 5675

昇腾AI原生创新算子挑战赛(S1赛季)复盘-LessEqual算子

【代码】昇腾AI原生创新算子挑战赛(S1赛季)复盘-LessEqual算子。

william_myq的博客 510

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

hive自定义函数

文章目录一.hive自定义函数介绍二.hive自定义函数开发1.需求:开发自定义函数,使得在指定字段前加上"Hello: "字样2.hive中UDF函数开发步骤3.功能实现 一.hive自定义函数介绍 当hive提供的内置函数无法满足业务需求时,可以考虑使用用户自定义函数(User-Defined Function,UDF) hive中常见的UDF有如下3中 1)UDF 一条记录使用函数后输出还是一条记录,如:upper/substr 2)UDAS(User-Defined Aggregation Fun

sun_0128的博客 3133

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【详解】Hive自定义函数

Apache Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行。其优点是学习成本低,可以通过类 SQL 语法快速分析海量数据。然而,在实际的数据处理过程中,我们可能会遇到一些 Hive 内置函数无法满足需求的情况。这时,就需要使用自定义函数(UDF,User Defined Function)来扩展 Hive 的功能。本文将介绍如何在 Hive 中创建和使用自定义函数。

牛肉胡辣汤 1679

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

HIVE中的自定义函数

HIVE中的自定义函数

朝着梦想 渐行前进 7077

hive自定义UDF函数

hive自定义UDF函数 1.什么是udf ​ UDF(User-Defined Functions)即是用户自定义的hive函数。hive自带的函数并不能完全满足业务的需求,这时就需要我们自定义函数了。 官网参考地址:LanguageManual UDF 2.UDF分类 1.UDF:one to one ,进来一个出去一个,row mapping。 是row级别操作,如:upper、subs...

思亘七险,点落九宫,神游八极,纵横十方。 3085

Hive函数 Hive自定义函数

Hive自定义函数 系统内置函数 1.查看系统自带的函数 hive> show functions; 2.显示自带的函数的用法 hive> desc function upper; 3.详细显示自带的函数的用法 hive> desc function extended upper; 自定义函数 1)Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定...

lljazxx的博客 304

Hive自定义UDF函数

UDF全称:User-Defined Functions,即用户自定义函数,在Hive SQL编译成MapReduce任务时,执行java方法,类似于像MapReduce执行过程中加入一个插件,方便扩展。1.编写UDF函数,UDF需要继承org.apache.hadoop.hive.ql.exec.UDF,UDTF继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF,UDAF使用比较少,这里先不讲解;

weixin_43597208的博客 1093

【Hive】(五)Hive函数—— 自定义函数

Hive函数  函数分类:   标准函数:一行数据中的一列或多列为输入,结果为单一值   聚合函数:多行的零列到多列为输入,结果为单一值   表生成函数:零个或多个输入,结果为多列或多行 自定义函数 UDF:自定义标准函数 1:1 输入一行,输出一行 UDAF:自定义聚合函数 n:1 输入多行,输出一行 UDTF:自定义表生成函数 1 : n 输入一行,输出多行 一、UDF 1...

weixin_42804692的博客 555
上一篇: 关于Hive的练习
下一篇: Hive优化总结
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值