用戶自定義標量函數(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 |/ / + - - - +