1006 Hive的自定義UDF函式

2021-07-02 23:45:19 字數 2602 閱讀 7658

hive可以任意定義乙個函式,然後該函式放到hive的classpath下,在進入hive中,使用該命令操作

場景:設中國移動的使用者在**上下單,下單記錄的主要字段包括

訂單號     手機號碼               商品編碼          商品數量          渠道

10000     18810637891     bm0001          1                      0001  

10001     18710637891     bm0002          2                      0002

10002     18710637891     bm0001          1                      0001

10003     18610637891     bm0002          2                      0003

10004     18610637891     bm0002          5                      0001

10005     18610637891     bm0004          2                      0005

已知:如何根據手機號得知該使用者對應的省份。假設規則如下(即:手機號前三位和省份的對應的關係)

188     北京(bj)

187     上海(sh)

186     河北(hb)

對上面的記錄在手機號的後面加上省份字段,然後把其餘字段輸出並上傳hdfs上

解決方案:

1、下單記錄日誌存放在日誌檔案jforder.log中

[hadoop@cloud01 sbin]$ hadoop fs -mkdir /external

[hadoop@cloud01 sbin]$ hadoop fs -mkdir /external/hive

hive> create external table  jf_order (orderno string ,mobileno string,warecode string,amount int ,channel string)

> row format delimited

> fields terminated by '\t'

> location '/external/hive';

[hadoop@cloud01 ~]$ more jforder.log

10000     18810637891     bm0001     1     0001 

10001     18710637891     bm0002     2     0002

10002     18710637891     bm0001     1     0001

10003     18610637891     bm0002     2     0003

10004     18610637891     bm0002     5     0001

10005     18610637891     bm0004     2     0005

[hadoop@cloud01 ~]$ hadoop fs -put jforder.log /external/hive

2、編寫hive的函式areafunction,作用根據手機號獲取對應的使用者省份

3、啟動eclipse,編寫udf函式

/***

@function: 定義省份轉換函式,載入hive的 classpath下,可以直接使用

*@authorshenfl

*@version:1.0

*@date: 2015-5

-31*

*/publicclassareafunctionextendsudf

publicstring evaluate(string

mobilenumber )

publicstaticvoidmain(string  args )

}4、上傳編寫的函式,把編寫好的函式放到hive的classpath下

hive>add jar /home/hadoop/hiveudf.jar;

hive>create temporary function area2 as 'com.hive.areafunction';

5、驗證

hive> select orderno ,area2(mobileno),warecode,amount ,channel from jf_order;

6、強化後的結果儲存到hdfs上

hive> insert overwrite directory  '/hiveout'  select orderno ,area2(mobileno),warecode,amount ,channel from jf_order;

hive自定義函式UDF

hive自定義函式 udf 可以幫助使用者輕鬆實現在hql語句中展現自定義查詢結果。這裡以乙個簡單的連線函式來實現使用者自定義函式,假設表結構如下 表中只有兩個簡單的字段,id和name。這裡實現乙個將id和name用 連線的函式,最後輸出結果。第一步 書寫stringjoin類,繼承udf,實現名...

hive自定義函式 UDF

幾個命令 檢視所有函式 hive show functions 檢視函式的使用方法 hive desc function 函式名 兩數和 addudf 自定義hive函式 description name myadd value myadd int a int b return a b extend...

hive自定義udf函式

在建立自定義函式時,需要將jar包全部部署到hive server節點的所有機器的使用者定義的udf引數目錄 hive.reloadable.aux.jars.path.jars.path.property property value usr lib hive lib value 呼叫 impor...