编写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; } }
- 参数说明:
col2:第二个整型参数(Integer对象类型)
- 返回值:返回col1与col2的算术和
步骤2:导出Jar包
编写调试完成代码后,通过IntelliJ IDEA工具编译代码并导出Jar包。
- 单击“Build”,参考下图分别单击“Build Project ”、“Build Artifacts...”分别对代码进行编译和打包。 图1 编译和打包
- 在弹出的对话框中单击Build。 图2 编译和打包

