You need to enable JavaScript to run this app.
湖仓一体分析服务 LAS 私有化

湖仓一体分析服务 LAS 私有化

复制全文
Hive
UDF 开发
复制全文
UDF 开发

您可以通过创建自定义函数(UDF)来满足不同的计算需求。UDF 在使用上与普通的内建函数类似。本文为您介绍自定义函数的开发和使用流程。

UDF 分类

UDF 分类

描述

UDF(User Defined Scalar Function)

自定义标量函数,通常称为UDF。其输入与输出是一对一的关系,即读入一行数据,写出一条输出值。

UDTF(User Defined Table-valued Function)

自定义表值函数,用来解决一次函数调用输出多行数据场景的,也是唯一一个可以返回多个字段的自定义函数。

UDAF(User Defined Aggregation Function)

自定义聚合函数,其输入与输出是多对一的关系,即将多条输入记录聚合成一条输出值,可以与SQL中的Group By语句联合使用。

开发 UDF

  1. 使用本地开发者工具,创建 Maven 工程
mvn archetype:generate -DgroupId=com.example -DartifactId=hiveudf -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  1. 添加 pom 依赖
<dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-exec</artifactId>
      <version>3.1.3</version>
      <exclusions>
         <exclusion>
           <groupId>org.pentaho</groupId>
           <artifactId>*</artifactId>
         </exclusion>
      </exclusions>
</dependency>
  1. 创建一个类,继承 Hive UDF 类。

提示:类名可以自由定义,本文以 MyUDF 为例。

package org.example;

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

/**
 * Hello world!
 *
 */
public class MyUDF extends UDF
{
    public String evaluate(final String s) {
        if (s == null) { return null; }
        return s + ":HelloWorld";
    }
}
  1. 将自定义代码打成 JAR 包
mvn clean package -DskipTests

target 目录下会出现 hiveudf-1.0-SNAPSHOT.jar 的JAR包,即代表完成了 UDF 开发工作。

使用 UDF

  1. 使用 SSH 方式登录到集群主节点
  2. 使用文件传输工具将生成的 JAR 包上传到当前 SSH 的节点。
  3. 将生成的 JAR 包上传至 HDFS
hadoop fs -put hiveudf-1.0-SNAPSHOT.jar /user/hive/
  1. 创建 UDF 函数
    • 执行以下命令,进入 Hive 命令行
su hive
hive
CREATE FUNCTION myfunc AS "org.example.MyUDF" USING JAR "hdfs:///user/hive/hiveudf-1.0-SNAPSHOT.jar";

参数

说明

myfunc

UDF 函数的名称

org.example.MyUDF

是开发 UDF 中创建的

hdfs:///user/hive/hiveudf-1.0-SNAPSHOT.jar

上传 JAR 包到 HDFS 的路径

当出现以下信息时,表示创建成功

Added [/tmp/8df0a4d5-5251-4a2f-99c5-413e88189041_resources/hiveudf-1.0-SNAPSHOT.jar] to class path Added resources: [hdfs:///user/hive/hiveudf-1.0-SNAPSHOT.jar] OK Time taken: 0.612 seconds

  1. 执行以下命令,使用 UDF 函数
SELECT myfunc("Hive");

返回如下信息:

OK
Hive:HelloWorld
Time taken: 1.781 seconds, Fetched: 1 row(s)

最近更新时间:2025.04.01 20:13:40
这个页面对您有帮助吗?
有用
有用
无用
无用