首先我们学习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):

ADD JAR /path/hive-sample.jar;  

  1. 给我们写的UDF中的Strip类起个别名
  2. CREATE TEMPORARY FUNCTION strip AS 'com.hadoop.hive.Strip';

经过了上面这个过程就可以在Hive中使用这个UDF了

比如 SELECT strip(‘bee‘)  FROM dummy;

转载于:https://www.cnblogs.com/duanxz/p/9083698.html

Hive的UDF是什么?相关推荐

  1. hive 的udf 函数使用

    1)依据课程讲解UDF编程案例,完成练习,总结开发UDF步骤,代码贴图,给予注释,重点 2)更改emp 表中名字的大写给为小写. 一:hive 的udf 函数: 1.1 hive UDF 函数概述: ...

  2. Hive自定义UDF的JAR包加入运行环境的方法

    Hive开发udf函数打包jar文件后,需将jar文件放入hive的运行环境,方法有三. 先将http://blog.csdn.net/fjssharpsword/article/details/70 ...

  3. Hive自定义UDF UDAF UDTF

    Hive是一种构建在Hadoop上的数据仓库,Hive把SQL查询转换为一系列在Hadoop集群中运行的MapReduce作业,是MapReduce更高层次的抽象,不用编写具体的MapReduce方法 ...

  4. hive的udf,udaf,udtf各自依賴兩種class(转载+分析整理)

    Hive自定义函数包括三种UDF.UDAF.UDTF 名稱縮寫 特點 依賴 UDF(User-Defined-Function) 一进一出 org.apache.hadoop.hive.ql.exec ...

  5. hive最新UDF函数(2016-10-25)

    为什么80%的码农都做不了架构师?>>>    hive UDF函数 :(后期翻译,暂时先贴着,有兴趣来  http://apache.wiki 可以一起来翻译呀) https:// ...

  6. Hive 自定义UDF函数讲解

    目录 一.UDF描述 二.UDF种类 三.自定义实现UDF和UDTF 3.1 需求 3.2 项目pom文件 3.3 Hive建表测试及数据 3.4UDF函数编写 3.5 UDTF函数编写 四:添加到h ...

  7. 如何写hive的udf函数?

    最近感受了hive的udf函数的强大威力了,不仅可以使用很多已经有的udf函数,还可以自己定义符合业务场景的udf函数,下面就说一下如何写udf/udaf/udtf函数,算是一个入门介绍吧. Firs ...

  8. Hive 10、Hive的UDF、UDAF、UDTF

    Hive自定义函数包括三种UDF.UDAF.UDTF UDF(User-Defined-Function) 一进一出 UDAF(User- Defined Aggregation Funcation) ...

  9. 使用Java编写Hive的UDF实现身份证号码校验及15位升级18位

    使用Java编写Hive的UDF实现身份证号码校验及15位升级18位 背景 在数仓项目中,有时候会根据身份证信息做一些取数filter或者条件判断的相关运算进而获取到所需的信息.古人是用Oracle做 ...

  10. 大数据hive篇--UDF函数

    什么是UDF: 它是User defined Function的简写,意思是用户自定义方法 为什么要用UDF? hive自带了一些函数,比如:max.min 等,但是自带的函数数量有限,所以hive提 ...

最新文章

  1. (七)OpenStack---M版---双节点搭建---Dashboard安装和配置
  2. Java:形式参数问题和返回值问题
  3. github密码格式_如何使用GitHub构建一个简单的网页 (不用框架版本)
  4. 【Nginx-20180108】Nginx的搭建文件服务器问题一则
  5. python 动态相册_Python编程:制作电子相册
  6. 为什么说社区团购进行得如火如荼?
  7. 手机电子商务进入黄金时期 主机WAP功能受重视
  8. 关于H5页面的测试总结与分析
  9. java伪代码 读后感
  10. MIMIC-IV数据库介绍与使用说明
  11. Python——私有化和动态添加属性和方法、Property、new和slots方法、单例、异常处理(day09)
  12. python运行黑色窗口怎么弄_selenium+python 去除启动的黑色cmd窗口方法
  13. itext7生成pdf页脚页码
  14. php curl登录,php curl实现第三方帐号登录
  15. Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构
  16. EXCEL中如何提取身份证出生日期和性别信息以及检验身份证号码的正确性
  17. Android studio 出现一直在同步Syncing only active variant
  18. 压缩pdf大小的方法?pdf文档怎么压缩最小?怎么压缩pdf文件大小?
  19. 安笙机器人_【D~小说】《安妻》 BY 李晓雾 (机甲,穿越)
  20. 01 计算机、程序和Java概述

热门文章

  1. 将C#Lambda表达式转换为通用过滤器描述符和HTTP查询字符串
  2. TinyWeb:C#中的简单Web服务器
  3. css 瀑布流布局_CSS-瀑布流布局
  4. vuedraggable嵌套块拖拽_Vue.Draggable拖拽效果
  5. java 文件crc校验_Java 对文件进行 CRC32 校验
  6. python从文件初始化失败怎么办_尝试打开.csv文件时出现“从文件初始化失败”错误(这根本没有问题)...
  7. android+动态地图+效果图,Android百度地图绘制圆形,圆形半径可动态变化
  8. 沃特玛采集均衡模块_云原生在京东丨云原生时代下的监控:如何基于云原生进行指标采集?...
  9. oracle12c xtts迁移,记录一次XTTS迁移碰到的问题
  10. tcp重复的确认_TCP如何实现可靠性传输