【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 "";

}

}

【Hive】Hive怎么写自定义函数(UDF、UDTF、UDAF)_第1张图片

 

你可能感兴趣的:(Hive学习,hive,大数据,hadoop)