外部用戶自定義標量函數(udf)

適用於:檢查標記是的磚運行時

用戶自定義標量函數(udf)是可編程程序,按照一行。這個文檔列出了所需的類創建和注冊udf。它還包含示例,演示如何定義和寄存器udf和火花SQL調用它們。

UserDefinedFunction

定義一個用戶定義函數的屬性,您可以使用這個類中定義的一些方法。

  • asNonNullable (): UserDefinedFunction:更新UserDefinedFunction非空。

  • asNondeterministic (): UserDefinedFunction:更新UserDefinedFunction不確定的。

  • withName(名稱:字符串):UserDefinedFunction:更新UserDefinedFunction用給定的名稱。

例子

進口orgapache火花sqlSparkSession進口orgapache火花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 |/ / + - - - +