• 【Hive】Hive怎么写自定义函数(UDF、UDTF、UDAF)


    步骤

    1、继承 Hive 提供的类
    org.apache.hadoop.hive.ql.udf.generic.GenericUDF
    org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;
    2、 实现类中的抽象方法
    3、在 hive 的命令行窗口创建函数
    添加 jar :add jar linux_jar_path
    创建 function :create [temporary] function [dbname.]function_name AS class_name;
    4、在 hive 的命令行窗口删除函数
    drop [temporary] function [if exists] [dbname.]function_name;

    自定义UDF函数

    1、创建一个 Maven工程:Hive

    2、导入依赖

    org.apache.hive

    hive-exec

    3.1.2

    3、创建一个类

    package com.atguigu.hive;

    import org.apache.hadoop.hive.ql.exec.UDFArgumentException;

    import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;

    import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;

    import org.apache.hadoop.hive.ql.metadata.HiveException;

    import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;

    import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;

    import

    org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectIn

    spectorFactory;

    /**

    *自定义UDF函数,需要继承GenericUDF

    *需求:计算指定字符串的长度

    */

    public class MyStringLength extends GenericUDF {

    /**

    *

            * @param arguments输入参数类型的鉴别器对象

    * @return返回值类型的鉴别器对象

    * @throws UDFArgumentException

    */

    @Override

    public ObjectInspector initialize(ObjectInspector[] arguments) throws

    UDFArgumentException {

    //判断输入参数的个数

    if(arguments.length !=1){

    throw new UDFArgumentLengthException("Input Args Length

    Error!!!");

    }

            //判断输入参数的类型

            if(!arguments[0].getCategory().equals(ObjectInspector.Category.PRIMITIVE)

            ){

    throw new UDFArgumentTypeException(0,"Input Args TypeError!!!");

    }

      //函数本身返回值为int,需要返回int类型的鉴别器对象

      return PrimitiveObjectInspectorFactory.javaIntObjectInspector;

    }

            /**

            *函数的逻辑处理

            * @param arguments输入的参数

    * @return返回值

    * @throws HiveException

    */

    @Override

    public Object evaluate(DeferredObject[] arguments) throws

    HiveException {

    if(arguments[0].get() == null){

    return 0;

    }

    return arguments[0].get().toString().length();

    }

    @Override

    public String getDisplayString(String[] children) {

    return "";

    }

    }

     

  • 相关阅读:
    Hadoop
    我为什么开始写技术博客
    计算机网络编程 | 并发服务器代码实现(多进程/多线程)
    C++单例模式与工厂模式
    【Linux】程序地址空间回顾
    使用WebStorm创建和配置TypeScript项目
    使用perming加速训练可预测的模型
    【MATLAB教程案例28】图像的边缘提取——canny、sobel、Laplacian以及图像亚像素级边缘提取
    查看apk签名
    DigiCert证书——银行官网的首选
  • 原文地址:https://blog.csdn.net/m0_65025800/article/details/126558381