- Hive 常用的UDF有一下三种:
1.1 UDF
一条记录使用函数后输出事宜一条记录,eg:lower/substr
1.2 UDAF(User Defined Aggregation Funcation)
多条记录使用函数后输出一条记录,eg:count/max/min
1.3 UDTF(User Defined Table-Generating Funcations)
一条记录使用函数后输出多条记录,eg:lateral view explore() - Hive 自定义函数开发步骤
2.1 继承UDF类;
2.2 重写 evaluate 方法,该方法支持重载,每一行记录执行一次 evaluate 方法。 - 用 IDEA 开发工具开发自定义函数
3.1 pom.xml 中添加UDF函数开发依赖包。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hadoop.version>2.6.0-cdh5.5.0</hadoop.version>
<hive.version>1.1.0-cdh5.5.0</hive.version>
</properties>
<repositories>
<!--CDH版本建议添加一个repository-->
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
<dependencies>
<!--hadoop依赖-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
<!--<scope>provided</scope>-->
</dependency>
<!--hive依赖-->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hadoop-exec</artifactId>
<version>${hive.version}</version>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hadoop-jdbc</artifactId>
<version>${hive.version}</version>
<!--<scope>provided</scope>-->
</dependency>
<dependencies>
3.2 自定义UDF函数的实现
package com.lenovo.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
public class Hello extends UDF{
public String evaluate(String h){
return "UDF"+h;
}
//功能测试
public static void main(String[] args){
Hello h = new Hello();
System.out.println(h.evaluate("baidu"))
}
}
- 自定义函数使用
4.1 编译成 jar 包上传到服务器;
4.2 将自定义函数添加到hive中
create temporary function sayHello as ‘package com.lenovo.hive.udf.Hello’
using jar ‘hdfs://namenodeha/user/p66_u1036_yanggq2/tmp/udf.jar’;
4.3 使用自定义函数
select sayHello(“wangyi”);