創建函數(外部)
適用於:磚運行時
創建一個臨時或永久的外部函數。臨時函數的作用域在會話級別,其中永久函數是在持久目錄中創建的,並且對所有會話可用。屬性中指定的資源使用
子句在第一次執行時對所有執行程序可用。
除了SQL接口,Spark還允許您使用Scala、Python和Java api創建自定義的用戶定義標量和聚合函數。看到用戶定義標量函數(udf)而且用戶定義聚合函數(udaf)獲取更多信息。
參數
或替換
如果指定了,函數的資源將被重新加載。這主要用於獲取對函數實現所做的任何更改。與互斥
如果不存在
和不能同時指定。臨時
指示正在創建的函數的範圍。當
臨時
時,所創建的函數有效且在當前會話中可見。目錄中沒有為這類函數創建持久條目。如果不存在
如果指定,則僅在函數不存在時創建該函數。如果指定的函數已經存在於係統中,則函數創建成功(沒有拋出錯誤)。與互斥
或取代
和不能同時指定。函數的名稱。函數名可以選擇使用模式名進行限定。
class_name
為要創建的函數提供實現的類的名稱。實現類應該擴展基類之一,如下所示:
應該擴大
UDF
或UDAF
在org.apache.hadoop.hive.ql.exec
包中。應該擴大
AbstractGenericUDAFResolver
,GenericUDF
,或GenericUDTF
在org.apache.hadoop.hive.ql.udf.generic
包中。應該擴大
UserDefinedAggregateFunction
在org.apache.spark.sql.expressions
包中。
resource_locations
包含函數實現及其依賴項的資源列表。
語法:
使用{{(JAR|文件|存檔)resource_uri},...}
例子
——1。創建一個簡單的UDF ' SimpleUdf ',將提供的整數值加10。——導入org.apache.hadoop.hive.ql.exec.UDF;——公共類SimpleUdf擴展了UDF {——public int evaluate(int value) {——返回值+ 10;- - -}- - -}——2。編譯並將其放在/tmp目錄下名為“SimpleUdf.jar”的JAR文件中。創建一個名為“test”的表,並插入兩行。>創建表格測驗(c1INT);>插入成測驗值(1),(2);——創建一個名為“simple_udf”的永久函數。>創建函數simple_udf作為“SimpleUdf”使用JAR“/ tmp / SimpleUdf.jar”;——驗證函數是否在注冊表中。>顯示用戶功能;函數------------------默認的.simple_udf——調用函數。每個選定的值都應加10。>選擇simple_udf(c1)作為function_return_value從t1;function_return_value---------------------1112——創建一個臨時函數。>創建臨時函數simple_temp_udf作為“SimpleUdf”使用JAR“/ tmp / SimpleUdf.jar”;——驗證新創建的臨時函數是否在注冊表中。臨時函數沒有限定——與之關聯的schema。>顯示用戶功能;函數------------------默認的.simple_udfsimple_temp_udf——1。修改' SimpleUdf '的實現,使所提供的整數值加20。——導入org.apache.hadoop.hive.ql.exec.UDF;——公共類SimpleUdfR擴展了UDF {——public int evaluate(int value) {——返回值+ 20;- - -}- - -}——2。編譯並將其放在/tmp目錄下名為“SimpleUdfR.jar”的jar文件中。替換' simple_udf '的實現>創建或取代函數simple_udf作為“SimpleUdfR”使用JAR“/ tmp / SimpleUdfR.jar”;——調用函數。每個選定的值都應加20。>選擇simple_udf(c1)作為function_return_value從t1;function_return_value---------------------2122