Hive中UDF编程

来源:互联网 发布:北京企飞力网络怎么样 编辑:程序博客网 时间:2024/05/22 04:50

开发 UDF 步骤,实现小写转大写

  1. pom.xml 加入Hive 依赖JAR包
  2. 创建类

    1. 继承UDF
    2. 方式名称: evaluate
    3. 返回值不能为null
    4. 一定要测试
  3. 代码

    package om.beifeng.bigdata;import org.apache.commons.lang.StringUtils;import org.apache.hadoop.hive.ql.exec.UDF;import org.apache.hadoop.io.Text;/** * * Step 1: *      1. Implement one or more methods named "evaluate" which will be called by Hive. *      2."evaluate" should never be a void method. However it can return "null" if needed. * */public class LowUDF extends UDF{    /**     * 实现单词转换为小写字母     *     * @param str     * @return     */    public Text evaluate(Text str){        // invalidate        if(null == str){            return null ;        }        if(StringUtils.isBlank(str.toString())){            return null ;        }        // 转小写        return new Text(str.toString().toLowerCase()) ;    }    public static void main(String[] args) {        System.out.println(new LowUDF().evaluate(new Text("HADOOOOO")));    }}
  4. 使用

    1. 上传jar包到/opt/datas下
      这里写图片描述
    2. 加载JAR包到CLASSPATH下面:add jar /opt/datas/senior-hive-1.0-SNAPSHOT.jar
      这里写图片描述
    3. 创建临时函数:
      这里写图片描述
    4. 使用:select ename,my_lower(ename) xx from emp;
      这里写图片描述
    5. 0.13版本以后创建永久函数

      dfs -put /opt/datas/senior-hive-1.0-SNAPSHOT.jar /user/beifeng/;CREATE FUNCTION my_lower2 AS 'om.beifeng.bigdata.LowUDF' USING JAR 'hdfs://hadoop-senior01.ibeifeng.com:8020/user/beifeng/senior-hive-1.0-SNAPSHOT.jar';

      这里写图片描述

    6. show functions;
      这里写图片描述

例:完成去除数据字段中双引号,自定义 UDF

  1. 原始文件
    这里写图片描述
  2. 处理后的结果显示在控制台
    这里写图片描述
  3. 具体代码

    package om.beifeng.bigdata;import java.io.File;import java.io.FileNotFoundException;import java.util.Scanner;import org.apache.commons.lang.StringUtils;import org.apache.hadoop.hive.ql.exec.UDF;import org.apache.hadoop.io.Text;public class QuotationUDF extends UDF{    /**     * 实现去除文本中的双引号     *     * @param str     * @return     */    public Text evaluate(Text str){        // invalidate        if(null == str){            return null ;        }        if(StringUtils.isBlank(str.toString())){            return null ;        }        return new Text(str.toString().replaceAll("\"","")) ;    }    public static void main(String[] args) {        try {            Scanner in = new Scanner(new File("/opt/datas/Quotation.txt"));            while (in.hasNextLine()) {                String str = in.nextLine();                System.out.println(new QuotationUDF().evaluate(new Text(str)));            }        } catch (FileNotFoundException e) {            e.printStackTrace();        }    }}
0 0
原创粉丝点击