日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

自定義函數(UDF)

Hive提供了很多內建函數來滿足您的計算需求,您也可以通過創建自定義函數(UDF)來滿足不同的計算需求。UDF在使用上與普通的內建函數類似。本文為您介紹自定義函數的開發和使用流程。

背景信息

UDF分類如下表。
UDF分類描述
UDF(User Defined Scalar Function)自定義標量函數,通常稱為UDF。其輸入與輸出是一對一的關系,即讀入一行數據,寫出一條輸出值。
UDTF(User Defined Table-valued Function)自定義表值函數,用來解決一次函數調用輸出多行數據場景的,也是唯一一個可以返回多個字段的自定義函數。
UDAF(User Defined Aggregation Function)自定義聚合函數,其輸入與輸出是多對一的關系,即將多條輸入記錄聚合成一條輸出值,可以與SQL中的Group By語句聯合使用。

開發UDF

  1. 使用IDE,創建Maven工程。
    工程基本信息如下,您可以自定義groupId和artifactId。
    <groupId>org.example</groupId>
    <artifactId>hiveudf</artifactId>
    <version>1.0-SNAPSHOT</version>
  2. 添加pom依賴。
    <dependency>
          <groupId>org.apache.hive</groupId>
          <artifactId>hive-exec</artifactId>
          <version>2.3.7</version>
          <exclusions>
             <exclusion>
               <groupId>org.pentaho</groupId>
               <artifactId>*</artifactId>
             </exclusion>
          </exclusions>
    </dependency>
  3. 創建一個類,繼承Hive UDF類。
    類名您可以自定義,本文示例中類名為MyUDF。
    package org.example;
    
    import org.apache.hadoop.hive.ql.exec.UDF;
    
    /**
     * Hello world!
     *
     */
    public class MyUDF extends UDF
    {
        public String evaluate(final String s) {
            if (s == null) { return null; }
            return s + ":HelloWorld";
        }
    }
  4. 將自定義的代碼打成JAR包。
    pom.xml所在目錄,執行如下命令制作JAR包。
    mvn clean package -DskipTests
    target目錄下會出現hiveudf-1.0-SNAPSHOT.jar的JAR包,即代表完成了UDF開發工作。

使用UDF

  1. 使用文件傳輸工具,將生成的JAR包上傳到集群root目錄。

    本示例使用了文件傳輸工具(SSH Secure File Transfer Client)。

  2. 上傳JAR包至HDFS。

    1. 通過SSH方式登錄集群,詳情請參見登錄集群

    2. 執行以下命令,將JAR包上傳到HDFS。

      hadoop fs -put hiveudf-1.0-SNAPSHOT.jar /user/hive/warehouse/

      您可以通過hadoop fs -ls /user/hive/warehouse/命令,查看是否上傳成功。待返回信息如下所示表示上傳成功。

      Found 1 items
      -rw-r--r--   1 xx xx 2668 2021-06-09 14:13 /user/hive/warehouse/hiveudf-1.0-SNAPSHOT.jar
  3. 創建UDF函數。

    1. 執行以下命令,進入Hive命令行。

      hive
    2. 執行以下命令,應用生成的JAR包創建函數。

      create function myfunc as "org.example.MyUDF" using jar "hdfs:///user/hive/warehouse/hiveudf-1.0-SNAPSHOT.jar";

      代碼中的myfunc是UDF函數的名稱,org.example.MyUDF開發UDF中創建的類,hdfs:///user/hive/warehouse/hiveudf-1.0-SNAPSHOT.jar為上傳JAR包到HDFS的路徑。

      當出現以下信息時,表示創建成功。

      Added [/private/var/folders/2s/wzzsgpn13rn8rl_0fc4xxkc00000gp/T/40608d4a-a0e1-4bf5-92e8-b875fa6a1e53_resources/hiveudf-1.0-SNAPSHOT.jar] to class path
      Added resources: [hdfs:///user/hive/warehouse/myfunc/hiveudf-1.0-SNAPSHOT.jar]
      說明

      您也可以通過命令SHOW FUNCTIONS LIKE '*myfunc*',驗證函數是否創建成功。

  4. 執行以下命令,使用UDF函數。

    該函數與內置函數使用方式一樣,直接使用函數名稱即可訪問。

    select myfunc("abc");

    返回如下信息。

    OK
    abc:HelloWorld

相關文檔