目录
一、自定义UDF函数--计算字符串长度
1、添加pom.xml文件
2、自定义UDF函数,java类
3、打包上传到liunx
二、创建hive函数
1、hive客户端,添加jar包
2、创建hive函数
3、测试并查看结果
UDF函数是一进一出函数,如hive中的substr、date_format、date_add、date_sub都是UDF函数。
自定义UDF函数步骤如下:
- 1)继承
org.apache.hadoop.hive.ql.exec.UDF
类 - 2)写固定的
evaluate()
方法
该方法必须有返回值,evaluate方法支持重载。业务逻辑处理写在evaluate()方法中。对于每行数据
都会调用一次evaluate()函数
注意继承UDF类时,不会报错、不需要实现抽象方法,这时需要我们写一个固定的evaluate()方法,而且方法名必须是evaluate。
一、自定义UDF函数--计算字符串长度
1、添加pom.xml文件
<properties>
<project.build.sourceEncoding>UTF8</project.build.sourceEncoding>
<hive.version>1.2.1</hive.version>
</properties>
<dependencies>
<!--添加hive依赖-->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>${hive.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
2、自定义UDF函数,java类
package com.atguigu.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
public class LengthUDF extends UDF {
//业务逻辑处理
//evaluate方法的参数为,hive函数中作用的字段类型
//int 返回值类型可以是int ,也可以是string,或者是其他数据类型
public int evaluate(String line){
int lineLength = line.length();
return lineLength;
}
}
编写一个UDF,关键在于自定义Java类需要继承UDF类并实现evaluate()函数。
因为在hive客户端执行查询时,对于每行输入都会调用evaluate()函数,evaluate()函数处理后的值会返回给hive。
3、打包上传到liunx
二、创建hive函数
1、hive客户端,添加jar包
在hive客户端,将xxx HiveUDF.jar
文件加载到类路径:
add jar /home/atguigu/bin/hivefunction-20220111-1.0-SNAPSHOT.jar;
2、创建hive函数
1) 创建临时函数语法:
CREATE TEMPORARY FUNCTION function_name AS class_name;
# function_name 函数名
# class_name 类路径,包名+类名
2)创建永久函数语法
create function small as 'com.qqhru.hive.LogUDTF' using jar '/user/hive/jars/1.jar';
- 这里测试,我们创建临时函数
CREATE TEMPORARY FUNCTION LengthUDF AS 'com.atguigu.udf.LengthUDF';
//cn.hust.book.bigdata.UDFDemo对应java程序包名+类名
3、测试并查看结果
select LengthUDF(name),name from person;
网友评论