更新时间:2026-07-28 GMT+08:00
分享

编写UDF函数代码并导出Jar包

步骤1:编写UDF函数代码

UDF函数实现,主要注意以下几点:

  • 自定义UDF需要继承UDFHandler。
  • 在方法上添加@TypeResolve注解,用于表明函数的入参和出参。
    入参和出参通过“->”分隔。入参和出参类型(resolveType)以及对应的SQL和Java数据类型请参考表1
    表1 resolveType类型

    SQL type

    Java type

    resolveType

    BooleanType

    Boolean.class

    BOOLEAN

    ByteType

    Byte.class

    BYTE

    ShortType

    Short.class

    SHORT

    IntegerType

    Integer.class

    INT

    LongType

    Long.class

    LONG

    FloatType

    Float.class

    FLOAT

    DoubleType

    Double.class

    DOUBLE

    StringType

    String.class

    STRING

    BinaryType

    byte[].class

    BINARY

    DecimalType.Fixed(precision, scale)

    BigDecimal.class

    Decimal

    DateType

    LocalDate.class

    DATE

    TimestampType

    ZonedDateTime.class

    TIMESTAMP

    TimestampNTZType

    LocalDateTime.class

    TIMESTAMP_NTZ

    YearMonthIntervalType

    Period.class

    INTERVAL_YEAR_MONTH

    DayTimeIntervalType

    Duration.class

    INTERVAL_DAY_TIME

    List

    List.class

    LIST

    Map

    Map.class

    MAP

    Struct

    Map.class

    STRUCT

  • 添加@deterministic注解:

    表明函数是确定性的,即在给定相同的输入时,总是返回相同的结果。

    详细UDF函数实现,可以参考如下样例代码:

    • 功能描述:实现两个Integer类型整数的加法运算,并返回计算结果
    • 示例代码:
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      package com.huawei.demo;
      
      import com.huawei.spark.function.types.FunctionType;
      import com.huawei.spark.function.types.TypeResolve;
      import com.huawei.spark.function.handlers.UDFHandler;
      
      @FunctionType(deterministic = true)
      public class UDFDemo extends UDFHandler {
          @FunctionType(deterministic = false)
          @TypeResolve("INT, INT->INT")
          public Integer testIntegerTypeAdd(Integer col1, Integer col2) {
              return col1 + col2;
          }
      }
      
    • 参数说明:

      col1:第一个整型参数(Integer对象类型)

      col2:第二个整型参数(Integer对象类型)

    • 返回值:返回col1与col2的算术和

步骤2:导出Jar包

编写调试完成代码后,通过IntelliJ IDEA工具编译代码并导出Jar包。

  1. 单击“Build”,参考下图分别单击“Build Project ”、“Build Artifacts...”分别对代码进行编译和打包。
    图1 编译和打包
  1. 在弹出的对话框中单击Build。
    图2 编译和打包
  1. 完成上述步骤之后,可以在项目目录当中看到out文件夹,展开out目录。

    其中的MyRemoteUDF.jar就是之后要上传到函数工作流FunctionGraph当中的jar包。

    图3 查看MyRemoteUDF.jar
  2. 右键单击MyRemoteUDF.jar,选择Copy Path/Reference,直接复制文件所在目录,方便之后上传JAR包使用。

    本示例将会生成到:“D:\UDFTest\MyRemoteUDF\out\artifacts\MyRemoteUDF_jar\”目录下,文件名为“MyRemoteUDF.jar”。

    图4 复制文件所在目录

相关文档