外部用户自定义标量函数(udf)
适用于:砖运行时
用户自定义标量函数(udf)是可编程程序,按照一行。这个文档列出了所需的类创建和注册udf。它还包含示例,演示如何定义和寄存器udf和火花SQL调用它们。
UserDefinedFunction
类
定义一个用户定义函数的属性,您可以使用这个类中定义的一些方法。
asNonNullable (): UserDefinedFunction:更新
UserDefinedFunction
非空。asNondeterministic (): UserDefinedFunction:更新
UserDefinedFunction
不确定的。withName(名称:字符串):UserDefinedFunction:更新
UserDefinedFunction
用给定的名称。
例子
进口org。apache。火花。sql。SparkSession进口org。apache。火花。sql。功能。udf瓦尔火花=SparkSession。构建器()。浏览器名称(“火花SQL UDF标量榜样”)。getOrCreate()/ /定义和注册一个无参数不确定的UDF/ / UDF默认是确定的,即相同的输入产生相同的结果。瓦尔随机=udf(()= >数学。随机())火花。udf。注册(“随机”,随机。asNondeterministic())火花。sql(“选择随机()”)。显示()/ / + - - - - - - - +/ / | UDF () |/ / + - - - - - - - +/ / | xxxxxxx |/ / + - - - - - - - +/ /定义一个参数UDF和注册瓦尔plusOne=udf((x:Int)= >x+1)火花。udf。注册(“plusOne”,plusOne)火花。sql(“选择plusOne (5)”)。显示()/ / + - - - +/ / | UDF (5) |/ / + - - - +/ / | 6 |/ / + - - - +/ /定义一个双参数UDF用火花在一个步骤并注册它火花。udf。注册(“strLenScala”,(_:字符串)。长度+(_:Int))火花。sql(“选择strLenScala('测试',1)”)。显示()/ / + - - - - - - - - - - - - - - - - - - - - - - +/ / | strLenScala(试验1)|/ / + - - - - - - - - - - - - - - - - - - - - - - +/ / | 5 |/ / + - - - - - - - - - - - - - - - - - - - - - - +/ / UDF WHERE子句火花。udf。注册(“oneArgFilter”,(n:Int)= >{n>5})火花。范围(1,10)。createOrReplaceTempView(“测试”)火花。sql(“SELECT *从测试oneArgFilter (id)”)。显示()/ / + - - - +/ / | | id/ / + - - - +/ / | 6 |/ / | 7 |/ / | 8 |/ / | 9 |/ / + - - - +
进口org.apache.spark.sql。*;进口org.apache.spark.sql.api.java.UDF1;进口org.apache.spark.sql.expressions.UserDefinedFunction;静态导入org.apache.spark.sql.functions.udf;进口org.apache.spark.sql.types.DataTypes;SparkSession火花=SparkSession。构建器()。浏览器名称(“Java火花SQL UDF标量榜样”)。getOrCreate();/ /定义和注册一个无参数不确定的UDF/ / UDF默认是确定的,即相同的输入产生相同的结果。UserDefinedFunction随机=udf(()- >数学。随机(),数据类型。倍增式);随机。asNondeterministic();火花。udf()。注册(“随机”,随机);火花。sql(“选择随机()”)。显示();/ / + - - - - - - - +/ / | UDF () |/ / + - - - - - - - +/ / | xxxxxxx |/ / + - - - - - - - +/ /定义一个参数UDF和注册火花。udf()。注册(“plusOne”,新UDF1<整数,整数>(){@Override公共整数调用(整数x){返回x+1;}},数据类型。IntegerType);火花。sql(“选择plusOne (5)”)。显示();/ / + - - - - - - - - - - - +/ / | plusOne (5) |/ / + - - - - - - - - - - - +/ / | 6 |/ / + - - - - - - - - - - - +/ /定义和注册一个双参数UDFUserDefinedFunctionstrLen=udf((字符串年代,整数x)- >年代。长度()+x,数据类型。IntegerType);火花。udf()。注册(“strLen”,strLen);火花。sql(“选择strLen('测试',1)”)。显示();/ / + - - - - - - - - - - - - +/ / | UDF(试验1)|/ / + - - - - - - - - - - - - +/ / | 5 |/ / + - - - - - - - - - - - - +/ / UDF WHERE子句火花。udf()。注册(“oneArgFilter”,新UDF1<长,布尔>(){@Override公共布尔调用(长x){返回x>5;}},数据类型。BooleanType);火花。范围(1,10)。createOrReplaceTempView(“测试”);火花。sql(“SELECT *从测试oneArgFilter (id)”)。显示();/ / + - - - +/ / | | id/ / + - - - +/ / | 6 |/ / | 7 |/ / | 8 |/ / | 9 |/ / + - - - +