如下图查看Spark源码一共有23中UDF函数
他们之间最大的区别就是传参数的个数问题的区别
UDF1函数源码如下:
public interface UDF1<T1, R> extends Serializable {
R call(T1 var1) throws Exception;
}
UDF2函数源码如下:
public interface UDF2<T1, T2, R> extends Serializable {
R call(T1 var1, T2 var2) throws Exception;
}
代码中实现如下:
sparkSession.udf().register("udfName", (UDF1<Long, Double>) (parameter) -> parameter*0.2, DataTypes.DoubleType);
其中register()该注册函数的参数解释如下:
第一个参数udfName就是你的udf的名字
第二个参数中的parameter 就是传入的如要处理的参数
第三个参数就是处理完的返回的数据类型
注:特别说明的UDF1<Long,Double> 中的Long表示传入的参数的数据类型,Double表示返回的参数的数据类型,这个必须与上面提到的注册函数的第三个参数保持一致。
其他的UDF2-UDF22等都是同理往下推,传入的参数的个数不断增加,始终就返回一个值。