• 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 {
    
        }
    }
  • 相关阅读:
    Core Foundation 框架
    iOS下微信语音播放之切换听筒和扬声器的方法解决方案
    http://blog.sina.com.cn/s/blog_6f40a0e70100p98l.html
    web移动开发最佳实践之js篇
    iOS框架介绍(五)Core Services 层
    针式PKM V9.36 最新版(2012_03_29)
    通过10000个小时的个人知识管理,将自己的智慧潜力挖掘出来
    下载 针式PKM V9.08 版
    如何避免重复造轮子问题?
    和evernote比 针式PKM有什么特色?
  • 原文地址:https://www.cnblogs.com/noyouth/p/12756350.html
Copyright © 2020-2023  润新知