zoukankan      html  css  js  c++  java
  • 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):

    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;

  • 相关阅读:
    数据仓库的直白概述
    Google准实时数据仓库Mesa(一)
    活动预告丨易盾CTO朱浩齐将出席2018 AIIA大会,分享《人工智能在内容安全的应用实践》
    3招搞定APP注册作弊
    【0门槛】PR稿的自我修养
    Hive中文注释乱码解决方案(2)
    Hive中文注释乱码解决方案
    网易考拉Android客户端网络模块设计
    有运气摇号来不及挑选?网易有数帮你科学选房
    selenium下拉框踩坑埋坑
  • 原文地址:https://www.cnblogs.com/duanxz/p/9083698.html
Copyright © 2011-2022 走看看