創建函數(外部)

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

創建一個臨時或永久的外部函數。臨時函數的作用域在會話級別,其中永久函數是在持久目錄中創建的,並且對所有會話可用。屬性中指定的資源使用子句在第一次執行時對所有執行程序可用。

除了SQL接口,Spark還允許您使用Scala、Python和Java api創建自定義的用戶定義標量和聚合函數。看到用戶定義標量函數(udf)而且用戶定義聚合函數(udaf)獲取更多信息。

語法

創建取代臨時函數如果存在function_name作為class_nameresource_locations

參數

  • 或替換

    如果指定了,函數的資源將被重新加載。這主要用於獲取對函數實現所做的任何更改。與互斥如果存在和不能同時指定。

  • 臨時

    指示正在創建的函數的範圍。當臨時時,所創建的函數有效且在當前會話中可見。目錄中沒有為這類函數創建持久條目。

  • 如果不存在

    如果指定,則僅在函數不存在時創建該函數。如果指定的函數已經存在於係統中,則函數創建成功(沒有拋出錯誤)。與互斥取代和不能同時指定。

  • function_name

    函數的名稱。函數名可以選擇使用模式名進行限定。

  • class_name

    為要創建的函數提供實現的類的名稱。實現類應該擴展基類之一,如下所示:

    • 應該擴大UDFUDAForg.apache.hadoop.hive.ql.exec包中。

    • 應該擴大AbstractGenericUDAFResolverGenericUDF,或GenericUDTForg.apache.hadoop.hive.ql.udf.generic包中。

    • 應該擴大UserDefinedAggregateFunctionorg.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_udfc1作為function_return_valuet1function_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_udfc1作為function_return_valuet1function_return_value---------------------2122