zoukankan      html  css  js  c++  java
  • Hive—UDF函数编写

    一、UDF函数

    UDF(User-Defined Functions)即用户定义的hive函数。hive自带的函数并不能完全满足业务需求,这时就需要我们自定义函数。

    二、分类

    1. UDF:one to one,进来一个出去一个,row mapping。是row级别操作,如:upper、substr函数
    2. UDAF:many to one,进来多个出去一个,row mapping。是row级别操作,如sum/min。
    3. UDTF:one to many ,进来一个出去多个。如alteral view与explode

    三、编写方法

    1)程序编写方法:

    (1)继承org.apache.hadoop.hive.ql.UDF

    (2)需要实现evaluate函数;evaluate函数支持重载;

    (3)在hive的命令行窗口创建函数

    注:UDF必须要有返回类型,可以返回null,但是返回类型不能为void;

    2)Hive加载jar文件

    (1)添加jar

      add jar linux_jar_path

    (2)创建function

      create [temporary] function [dbname.]function_name AS class_name;

    (3)在hive的命令行窗口删除函数

      Drop [temporary] function [if exists] [dbname.]function_name;

    三、实例

    1.eclipse建maven项目

    2.导入依赖

      <dependencies>
          <dependency>
              <groupId>org.apache.hive</groupId>
              <artifactId>hive-exec</artifactId>
              <version>1.2.2</version>
          </dependency>
      </dependencies>

    3.编写一个测试函数

    package com.atguigu.hive;
    
    import org.apache.hadoop.hive.ql.exec.UDF;
    
    public class Lower extends UDF {
    
        public String evaluate(final String s) {
            if (s == null) {
                return null;
            }
            return s.toLowerCase();
        }
    }

    4.export导出jar文件

    5.将udf.jar上传至/opt/module/jars/目录。

    6.将jar包添加到hive的classpath

    hive (default)> add jar /opt/module/jars/udf.jar;
    Added [/opt/module/jars/udf.jar] to class path
    Added resources: [/opt/module/jars/udf.jar]

    7.创建临时函数

    hive (default)> create temporary function mylower as "com.atguigu.hive.Lower";
    OK
    Time taken: 1.06 seconds

    temporary函数当前黑窗口有效,重新打开无效,提示以下错误。

    hive (default)> select mylower(ename)  from emp;
    FAILED: SemanticException [Error 10011]: Line 1:7 Invalid function 'mylower'
    View Code

    8.执行临时函数

    hive (default)> select ename,mylower(ename) from emp;
    OK
    ename   _c1
    SMITH   smith
    ALLEN   allen
    WARD    ward
    JONES   jones
    MARTIN  martin
    BLAKE   blake
    CLARK   clark
    SCOTT   scott
    KING    king
    TURNER  turner
    ADAMS   adams
    JAMES   james
    SMITH   smith
    ALLEN   allen
    WARD    ward
    JONES   jones
    MARTIN  martin
    BLAKE   blake
    CLARK   clark
    SCOTT   scott
    KING    king
    TURNER  turner
    ADAMS   adams
    JAMES   james
    Time taken: 1.07 seconds, Fetched: 24 row(s)

    9.创建永久函数

    (1)HDFS上创建路径

    [ck@hadoop102 ~]$ dfs -mkdir -p /lib

    (2)上传jar包到/lib路径

    hive (default)> dfs -put /opt/module/jars/udf.jar /lib

    (3)创建函数

    hive (default)> create function mylower1 as 'com.atguigu.hive.Lower' using jar 'hdfs://hadoop102:9000/lib/udf.jar';

    (4)在MySQL的metastore库中执行

    select * from  FUNCS;

    参考atguigu视频资料

  • 相关阅读:
    VUE 脚手架模板搭建
    defineProperty
    理解JS中的call、apply、bind方法
    Two-phase Termination模式
    打印样式设计
    浏览器内部工作原理
    Immutable Object模式
    怎么跳出MySQL的10个大坑
    控制台console
    整理的Java资源
  • 原文地址:https://www.cnblogs.com/zs-chenkang/p/14445635.html
Copyright © 2011-2022 走看看