91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

hive使用UDF函數

發布時間:2020-07-20 09:53:23 來源:網絡 閱讀:1639 作者:bigdata_lzw 欄目:大數據

官方關于UDF的使用介紹:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF


UDF幾個相關概念:

????UDF: one-to-one row mapping : upper substr【進來一行出去一行】

????UDAF: Aggregation? ?Many-to-one row mapping? ?比如sum/min【進來多行出去一行】

????UDTF: Table-generating? one-to-many? ? 比如:lateral view explode()【一對多】


編寫UDF函數測試代碼:

pod.xml添加hive:

<!--添加hive依賴-->
<hive.version>1.1.0-cdh6.7.0</hive.version>

<dependency>
??<groupId>org.apache.hive</groupId>
??<artifactId>hive-exec</artifactId>
??<version>${hive.version}</version>
</dependency>

HelloUDF.java:

package?com.ruozedata.hadoop.udf;

import?org.apache.hadoop.hive.ql.exec.UDF;

public?class?HelloUDF?extends?UDF{
????public?String?evaluate(String?input)?{
????????//TODO...此處為開發業務邏輯的地方
????????return?"Hello:"?+?input;
????}

????//下面為測試代碼
????public?static?void?main(String[]?args)?{
????????HelloUDF?udf?=?new?HelloUDF();
????????String?output?=?udf.evaluate("測試數據");
????????System.out.println(output);
????}
}
注:實現UDF函數的套路是一樣的,第一步繼承UDF函數,第二步重寫evaluate方法

在idea中用maven打包后,上傳到hive服務器;包名為:g6-hadoop-udf.jar


hive創建函數的幾種方式:

方法一:創建臨時函數(Temporary Functions)

????官方參考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateFunction

????缺點:Temporary Functions只對當前?session(窗口)有效? ?


????示例:在Hive的Shell中執行

????ADD JAR /home/hadoop/lib/g6-hadoop-udf.jar;

????CREATE TEMPORARY FUNCTION sayHello AS 'com.ruozedata.hadoop.udf.HelloUDF';

????

????show functions;(執行此語句,可以看到sayHello在函數中)

????select sayhello('abc') from dual;(輸出的結果為:Hello:abc)

????注:此種方式還有一個缺點是,jar需要每次手動add才能識別class_name

方法二:無需手動add jar包

????在hive的家目錄下創建auxlib目錄,把jar包放在此目錄下即可;

????不管創建臨時函數,還是持久函數,把jar放入auxlib后就無需手動進行加載;

方法三:創建持久函數(Permanent Functions),并且使用hdfs上的jar;生產建議此種方式

????從hive 0.13開始,支持將函數注冊到metastore中,存放的表為FUNCS(里邊默認為空);

????hive使用UDF函數

????

????將jar包放在hdfs的/lib目錄下;

????

????示例:在Hive的Shell中執行以下命令

CREATE?FUNCTION?sayhello2?AS?'com.ruozedata.hadoop.udf.HelloUDF'?USING?JAR?'hdfs://ruozeclusterg6/lib/g6-hadoop-udf.jar';

????注:此時可以任何窗口使用sayhello2函數(使用show functions無法查到,但在元數據的FUNCS表中可以看到)


????查看mysql中hive庫的FUNCS表;發現sayhello2已成功進行注冊;

????hive使用UDF函數

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延津县| 中方县| 玛沁县| 三明市| 阿勒泰市| 永泰县| 朔州市| 石楼县| 永平县| 荥阳市| 合水县| 文成县| 万盛区| 铜川市| 双城市| 桃江县| 白朗县| 长治县| 栾川县| 确山县| 大化| 富锦市| 赣榆县| 巫溪县| 浏阳市| 小金县| 郧西县| 克什克腾旗| 呼玛县| 唐海县| 左权县| 扶风县| 全南县| 稻城县| 永济市| 水城县| 西乌| 千阳县| 双江| 桓台县| 普安县|