用戶定義標量函數(udf)

適用於:勾選“是”磚運行時

用戶定義標量函數(udf)是作用於一行的用戶可編程例程。本文檔列出了創建和注冊udf所需的類。它還包含演示如何在Spark SQL中定義和注冊udf並調用它們的示例。

UserDefinedFunction

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

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

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

  • withName(name: String): UserDefinedFunction:更新UserDefinedFunction有一個名字。

例子

進口orgapache火花sqlSparkSession進口orgapache火花sql功能udf瓦爾火花SparkSession構建器()瀏覽器名稱“Spark SQL UDF標量示例”getOrCreate()//定義並注冊一個零參數的不確定性UDF// UDF默認是確定的,即對相同的輸入產生相同的結果。瓦爾隨機udf(()= >數學隨機())火花udf注冊“隨機”隨機asNondeterministic())火花sql“選擇隨機()”).顯示()// +-------+// | udf () | . txt// +-------+/ / | xxxxxxx |// +-------+//定義並注冊一個單參數UDF瓦爾plusOneudf((xInt= >x+1火花udf注冊“plusOne”plusOne火花sql“選擇plusOne(5)”).顯示()// +------+/ / | UDF (5) |// +------+// | 6| .使用實例// +------+//定義一個雙參數的UDF,一步注冊到Spark火花udf注冊“strLenScala”_:字符串).長度+_:Int))火花sql“SELECT strLenScala('test', 1)”).顯示()// +--------------------+// |strLenScala(test, 1)| .使用實例// +--------------------+// | 5| .// +--------------------+// WHERE子句中的UDF火花udf注冊“oneArgFilter”nInt= >n>5})火花範圍110).createOrReplaceTempView“測試”火花sql"SELECT * FROM test WHERE 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.DataTypesSparkSession火花SparkSession構建器()瀏覽器名稱Java Spark SQL UDF標量示例getOrCreate();//定義並注冊一個零參數的不確定性UDF// UDF默認是確定的,即對相同的輸入產生相同的結果。UserDefinedFunction隨機udf()->數學隨機(),數據類型倍增式);隨機asNondeterministic();火花udf().注冊“隨機”隨機);火花sql“選擇隨機()”).顯示();// +-------+// | udf () | . txt// +-------+/ / | xxxxxxx |// +-------+//定義並注冊一個單參數UDF火花udf().注冊“plusOne”UDF1<整數整數>()@Override公共整數調用整數x返回x+1},數據類型IntegerType);火花sql“選擇plusOne(5)”).顯示();// +----------+/ / | plusOne (5) |// +----------+// | 6| .使用實例// +----------+//定義並注冊一個雙參數UDFUserDefinedFunctionstrLenudf字符串年代整數x->年代長度()+x數據類型IntegerType);火花udf().注冊“strLen”strLen);火花sql"SELECT strLen('test', 1)").顯示();// +------------+// |UDF(test, 1)|// +------------+// | 5| .// +------------+// WHERE子句中的UDF火花udf().注冊“oneArgFilter”UDF1<布爾>()@Override公共布爾調用x返回x>5},數據類型BooleanType);火花範圍110).createOrReplaceTempView“測試”);火花sql"SELECT * FROM test WHERE oneArgFilter(id)").顯示();// +---+// | id| .使用實例// +---+// | 6| .使用實例// | 7| .// | 8| .// | 9| .使用實例// +---+