• Hive 自定义函数


    准备工作,创建工程,添加jar

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

    一、udf函数

    1.编写自定义函数。

    ①继承UDF,添加evaluate方法,虽然不是实现也不是重写,但是方法名必须叫evaluate。

    ②此evaluate方法可以重载。

    public class MyUDF extends UDF {
    
        public int evaluate(int data){
            return data + 5;
        }
    }

    2.打包,上传到服务器,hive的lib目录下。

    3.将jar包添加到hive的classpath。

    hive (default)> add jar /opt/module/hive/lib/hive-udf-1.0-SNAPSHOT.jar;

    4.创建(临时)函数与java类关联。生产环境要指定函数所在的库名。

    语法:create [temporary] function [dbname.]function_name AS class_name;

    hive (default)> create temporary function addFive as "com.atguigu.udf.MyUDF";

    5.使用自定义函数。

    hive (default)> select addFive(2);
    OK
    _c0
    7

    二、udtf函数

    编写自定义函数,其他步骤与上同。

    public class MyUDTF extends GenericUDTF {
    
        private List<String> dataList = new ArrayList<>();
    
        @Override
        public StructObjectInspector initialize(StructObjectInspector argOIs) throws UDFArgumentException {
    
            //1.自定义列名集合
            List<String> fieldNames = new ArrayList<>();
            fieldNames.add("lineToWord");
    
            //2.输出数据的类型
            List<ObjectInspector> fieldOIs = new ArrayList<>();
            fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
            return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs);
        }
    
        //函数的参数被封装为一个数组
        @Override
        public void process(Object[] objects) throws HiveException {
            //获取数据
            String data = objects[0].toString();
    
            //获取分隔符
            String splitKey = objects[1].toString();
    
            //切分数据
            String[] words = data.split(splitKey);
    
            //遍历写出
            for (String word : words) {
                dataList.clear();
                dataList.add(word);
                forward(dataList);
            }
    
        }
    
        @Override
        public void close() throws HiveException {
    
        }
    }
  • 相关阅读:
    [Codeforces 1178D]Prime Graph (思维+数学)
    [Codeforces 316E3]Summer Homework(线段树+斐波那契数列)
    [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)
    [HDU 3625]Examining the Rooms (第一类斯特林数)
    [Codeforces 364D]Ghd(随机算法+gcd)
    【快速幂】POJ3641
    【二分查找】POJ2456-Aggressive cows
    【判断解是否可行-二分】POJ1064-Cable master
    【动态规划/递推】BZOJ1806[IOI2007]- Miners
    【动态规划去除冗余】NOIP2010-乌龟棋
  • 原文地址:https://www.cnblogs.com/noyouth/p/12756350.html
Copyright © 2020-2023  润新知