zoukankan      html  css  js  c++  java
  • 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 {
    
        }
    }
  • 相关阅读:
    操作缓冲池
    占位图像
    GCD 常用代码
    资源共享(抢夺)
    drf版本控制 django缓存
    drf分页器
    解析器,路由控制,响应器
    drf 频率组件 META字典详情
    vue创建路由,axios前后台交互,element-ui配置使用,django contentType组件
    redis列表,字典,管道,vue安装,创建项目
  • 原文地址:https://www.cnblogs.com/noyouth/p/12756350.html
Copyright © 2011-2022 走看看