Hive的UDF概念

首先我们学习hadoop的时候,为了让我们不太会java语言但是对SQL很熟悉的工程师能够操作基本的mapreduce计算过程,Hive被设计出来了。Hive就好比是hadoop在执行MR(mapreduce)程序的一个操作系统,因为我们可以用简单的SQL语句去代替复杂的MR程序,因为Hive可以将我们的SQL语句转化为MR程序然后去执行。Hive的语法和SQL的语法很多地方是相同的,所以说它就是为熟连使用SQL的工程师设计的。

首先什么是UDF,UDF的全称为user-defined function,用户定义函数,为什么有它的存在呢?有的时候 你要写的查询无法轻松地使用Hive提供的内置函数来表示,通过写UDF,Hive就可以方便地插入用户写的处理代码并在查询中使用它们,相当于在HQL(Hive SQL)中自定义一些函数。

首先UDF必须用java语言编写,Hive本身就是用java写的。所以想学好hadoop这个分布式框架的相关技术,熟练使用java就是基本功了!

Hive中有三种UDF:(普通)UDF、用户定义聚集函数(user-defined aggregate function,UDAF)、用户定义表生成函数(user-defined table-generating function,UDTF)。

UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。

UDAF 接受多个输入数据行,并产生一个输出数据行。想COUNT和MAX这样的函数就是聚集函数。

UDTF 操作作用于单个数据行,并且产生多个数据行-------一个表作为输出

首先一个UDF必须满足下面两个条件:

1 一个UDF必须是org.apache.hadoop.hive.ql.exec.UDF的子类(换句话说就是我们一般都是去继承这个类)

2 一个UDF必须至少实现了evaluate()方法

注意UDF名不是大小写敏感的

一个UDAF计算函数必须实现下面的5个方法:

1 init()方法 init()方法负责初始化计算函数并重设它的内部状态。在MaximumIntUDAFEvaluator中,我们把存放最终结果的IntWritable对象设置为null。我们使用null来表示目前还没有对任何值进行聚集计算,这和对空集NULL计算最大值应有的结果是一致的。

2 iterate()方法 每次对一个新值进行聚集计算时都会调用iterate()方法。计算函数要根据聚集计算的结果更新其内部状态。iterate()接受的参数和Hive中被调用函数的参数使对应的。

3 terminatePartial()方法 Hive需要部分聚集结果时会调用terminatePartial()方法。这个方法必须返回一个封装了聚集计算当前状态的对象。

4 merge()方法 在Hive决定要合并一个部分聚集值和另一个部分聚集值时会调用merge()方法。该方法接受一个对象作为输入。这个对象的类型必须和terminatePartial()方法返回的类型一致。

5 terminate() Hive需要最终聚集结果时会调用terminate()方法。计算函数需要把状态作为一个值返回。

具体去写UDF的过程我这里就不具体说了,我来说说,怎样去把我们写好的UDF放到Hive中去使用:

首先我们将用java写好的UDF函数编译后的Java类打包成为一个JAR文件,并在Hive中注册这个文件(相当于告诉Hive这个是我写的UDF):

转载”https://blog.csdn.net/yqlakers/article/details/70211522

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

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

相关文章

QAQ的幸运数字 数学

QAQ的幸运数字 Time Limit: 1000MS Memory Limit: 65536KBSubmit StatisticProblem Description 金牌巨 QAQ 经常靠涨人品 (Rising RP) 来 A 题。他的幸运数字是 4 和 7,因此他也经常在第 4 发或第 7 发提交时过题(误)。 一天,突 …

根据经纬度求最近点的三种解法java实现

文章目录1. geoHash2. kdTree算法求最近点3.暴力法4.利用elasticsearch或者lucene1. geoHash 首先对经纬度点进行编码: 利用geoHash把经纬转换成32进制的编码字符串将待搜索的坐标转换成编码与坐标库中的串进行比较,找出前缀匹配长度高放入map中&#…

bLue的除法算术题 数学

bLue的除法算术题 Time Limit: 1000MS Memory Limit: 65536KBSubmit StatisticProblem Description bLue 最近接了个重活,需要帮助小学生手算大量的除法算术题,这可把他累坏了。 但是,机智的 bLue 一想,写个 “printf("%f&qu…

机器学习入门知识

本文主要向大家介绍了机器学习入门之机器学习------精心总结,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。 1.数学 偏差与方差 拉格朗日 核函数 凸优化 协方差矩阵 Hessian矩阵 CDF(累计分布函数) 高斯概率密…

RMQ算法

RMQ算法 标签: 算法querytable2012-08-28 20:53 14613人阅读 评论(7) 收藏 举报分类:nyist(26) 数据结构(5) 1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询…

机器学习分享的资源

PDF:https://blog.csdn.net/lqf921205/article/details/78399869 视频:https://blog.csdn.net/q361239731/article/details/81012904

【转载】最全最详细Hadoop学习文章

https://www.cnblogs.com/qingyunzong/category/1169344.html

bellman ford 算法 判断是否存在负环

Flyer 目录视图摘要视图订阅 微信小程序实战项目——点餐系统 程序员11月书讯,评论得书啦 Get IT技能知识库,50个领域一键直达关闭bellman ford 算法 2013-05-25 15:36 11148人阅读 评论(0) 收藏 举报分类:ACM(11&a…

[转载]文本特征TFIDF权重计算及文本向量空间VSM表示

https://blog.csdn.net/Fighting_No1/article/details/51000066

TFIDF java实现

代码模板: jar包下载:https://download.csdn.net/download/dreamzuora/10853842 /*** */ package TFIDF;import java.util.Arrays; import java.util.List;/*** author weijie* 作用:用来计算词项对于一个文档集或一个语料库中的一份文件的重…

KDTree算法

原理: 1.https://www.cnblogs.com/porco/p/4464414.html(里面代码不好修改,不建议直接利用) 2.https://www.cnblogs.com/zfyouxi/p/4795584.html 实例:可以用来求最短距离的点,例如:根据经纬度求…

【java机器学习】决策树算法

参考文章:https://blog.csdn.net/qq_38773180/article/details/79188510 java代码: package decisionTree; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; i…

C++ vector用法

C vector用法 在c中&#xff0c;vector是一个十分有用的容器&#xff0c;下面对这个容器做一下总结。 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象&#xff0c;vector<int> vec; (3)尾部插入数字&#xff1a;vec.push_back(a); (4)使用下标访问元素&…

【java机器学习】词向量在贝叶斯中的概念

向量&#xff1a; 在数学中&#xff0c;向量&#xff08;也称为欧几里得向量、几何向量、矢量&#xff09;&#xff0c;指具有大小&#xff08;magnitude&#xff09;和方向的量 词向量&#xff1a; 词向量&#xff08;Word embedding&#xff09;&#xff0c;又叫Word嵌入式自…

【java机器学习】贝叶斯分类

参考文章&#xff1a;https://blog.csdn.net/qq_24369113/article/details/53291867#commentsedit

【java机器学习】支持向量机之拉格朗日乘子法解释

什么是拉格朗日乘子法 按照维基百科的定义&#xff0c;拉格朗日乘数法是一种寻找多元函数在其变量受到一个或多个条件的约束时的极值的方法。用数学式子表达为&#xff1a; 简单理解就是&#xff0c;我们要在满足 这个等式的前提下&#xff0c;求 函数的最小值&#xff08;最大…

字典树(Trie树)

字典树(Trie树)字典树&#xff0c;又称单词查找树&#xff0c;Trie树&#xff0c;是一种树形结构&#xff0c;典型应用是用于统计&#xff0c;排序和保存大量的字符串&#xff0c;所以经常被搜索引擎系统用于文本词频统计。它的优点是&#xff1a;利用字符串的公共前缀来节约存…

【java机器学习】svm入门十讲

博客&#xff1a;http://www.blogjava.net/zhenandaci/archive/2009/03/06/258288.html

Java解析json出现双引号变成转义字符解决办法

Java中&#xff1a;利用StringEscapeUtils.unescapeHtml4强转 String newJson StringEscapeUtils.unescapeHtml4(jsonStr);

棋盘问题 dfs

棋盘问题Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 38265 Accepted: 18742 Description 在一个给定形状的棋盘&#xff08;形状可能是不规则的&#xff09;上面摆放棋子&#xff0c;棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列…