日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hive - 自定义函数(超详细步骤,手把手的交)

發(fā)布時間:2024/7/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive - 自定义函数(超详细步骤,手把手的交) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

用Java開發(fā)自定義函數(shù),步驟:

1.eclipse上新建一個工程project(db2019);

?

2.導(dǎo)jar依賴包:

db2019右鍵 --build path --configure...

--add library --user library --new(新建一個library(hive2.3.2_jar))

--add external jars(添加jar包) --認準(zhǔn)路徑,全選所有包(一般第一個不是)

--點OK --勾選hive2.3.2_jar --Finish --Apply --點OK

?

3.新建一個包package(com.ghgj.cn.udf):

--右鍵db2019下的src --new --package --輸入name(com.ghgj.cn.udf) --Finish

?

4.定義一個類class(MyUdf):

--右鍵com.ghgj.cn.udf --new --class --輸入name(MyUdf) --Finish

此時代碼自動顯示為:

package com.ghgj.cn.udf;

public calss MyUdf{

}

?

5.繼承 UDF 這個類

--下載hive源碼包:apache-hive-2.3.2-src.tar.gz

--解壓源碼包得到:apache-hive-2.3.2-src.tar

--再解壓apache-hive-2.3.2-src.tar,得到文件:apache-hive-2.3.2-src

package com.ghgj.cn.udf;

public calss MyUdf extends UDF{

}

--選中UDF,在自動冒出來的所有選擇中,選擇是hive的(org.apache.hadoop.hive.ql.exec)

?

關(guān)聯(lián)一下 UDF 和源碼包 apache-hive-2.3.2-src:

--點擊代碼中的UDF --attach source

--選擇external location --添加路徑(external folder...)

--找到源碼包 apache-hive-2.3.2-src --點確定 --點OK(然后等待兩者關(guān)聯(lián))

生成一個UDF.class的類,這個類中告訴我們:

  • 新建的MyUdf類必須先繼承這個類,即:public calss MyUdf extends UDF{}
  • 新建的MyUdf類可以實現(xiàn)一個或多個自定義函數(shù)evaluate()
  • 自定義函數(shù)evaluate()可以被hive調(diào)用

?

?

6.在eclipse中實現(xiàn)一個或多個自定義函數(shù)evaluate()

package com.ghgj.cn.udf; import org.apache.hadoop.hive.ql.exec.UDF; public calss MyUdf extends UDF{ //evaluate()括號中輸入需要處理的字段,可以是一個或多個,并需要指定參數(shù)類型 //return的結(jié)果是什么類型,則evaluate()前就輸入什么類型 private int evaluate(int age){ //年齡對3取余 int res = age%3; return res } private int evaluate(int a,int b){ //求和 return a+b } private String evaluate(String ip){ //將IP地址補全為三位數(shù),便于比較 //65.727.2.9 補全為065.727.002.009 int res = age%3; String[] split = ip.split('\\.');#將IP根據(jù).分割開,.需要轉(zhuǎn)義 StringBuffer sb = new StringBuffer();#先創(chuàng)建一個空的StringBuffer類型的串 for(String s:split){ //邏輯:每一個數(shù)字前添加至少3個0,然后截取后三位 //65-->00065-->取后三位065 String tmp = '000' + s; #數(shù)字前添加0 //截取后3位,并在每個數(shù)字后面添加分隔符. sb.append(tmp.substring(tmp.length()-3)).append('.'); //去掉最后一個分隔符. resb = sb.toString().substring(0,sb.length()-1); } return resb } }

測試一下:

public static void main(String[] args) { MyUdf mu = new MyUdf(); System.out.printIn(mu.evaluate(5)); #測試第1個,5%3=2,輸出2 System.out.printIn(mu.evaluate(5,3)); #測試第2個,5+3=8,輸出8 System.out.printIn(mu.evaluate('65.727.2.9')); #測試第3個,輸出065.727.002.009 }

?

?

hive上添加自定義函數(shù),步驟:

1.打jar包

--右鍵com.ghgj.cn.udf --export...

--點擊jar file --下一步

--展開db2019 --勾選com.ghgj.cn.udf

--修改jar file中的jar包的名稱(myudf.jar) --Finish

?

2.將jar包上傳到Linux

  • [hadoop@hadoop01 ~]$ Alt+P #打開sftp
  • sftp>
  • 拖動jar包文件到SecureGRT對話框中
  • [hadoop@hadoop01 ~]$ cd~
  • [hadoop@hadoop01 ~]$ ls #查看列表中是否有myudf.jar
  • ?

    ?

    3.將jar包放在hive的classpath下

    在hive客戶端執(zhí)行下面命令:add jar [jar包的路徑]

    hive> add jar /user/hadoop/myudf.jar;

    結(jié)果:

    added [/user/hadoop/myudf.jar] to class path

    added resources:[/user/hadoop/myudf.jar]

    表示命令執(zhí)行成功,但是jar包不一定真的添加成功

    檢測jar包是否添加成功:

    list jars;

    若運行結(jié)果中有/user/hadoop/myudf.jar,代表添加成功

    ?

    4.給自定義函數(shù)evaluate()添加別名,并在hive中注冊這個函數(shù)

    create temporary function my_fuc as 'com.ghgj.cn.udf.MyUdf';

    temporary是臨時的意思,代表hive當(dāng)前客戶端一旦關(guān)閉,my_fuc便失效;

    as 后面跟的是主類名路徑:

    --eclipse中在代碼中右擊MyUdf --copy qualified name(則復(fù)制了MyUdf的全路徑名)

    ?

    5.查看hive的函數(shù)庫中是否已添加自定義函數(shù)my_fuc

    show functions;

    內(nèi)置函數(shù)有271個,若顯示有272個,且能找到my_fuc,代表添加成功

    ?

    注意:

    • 以上方式添加的函數(shù)是臨時的函數(shù),hive當(dāng)前客戶端一旦關(guān)閉,my_fuc便失效;
    • 若需要再次使用,則需要重復(fù)步驟3、4、5
    • 生產(chǎn)中一般也使用這種臨時的方式,若需要變成永久函數(shù),需要改源碼,太麻煩不建議使用。

    ?

    ?

    ?

    hive上使用自定義函數(shù)

    my_fuc有多個evaluate()方法,通過函數(shù)名稱evaluate和參數(shù)(參數(shù)個數(shù)和類型)可以確定調(diào)用的是哪個方法

    hive>select my_fuc(4); # 4%3=1,輸出1 hive>select my_fuc(4,3); # 4+3=7,輸出7 hive>select my_fuc('1.234.11.7'); # 輸出001.234.011.007

    ?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的hive - 自定义函数(超详细步骤,手把手的交)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲麻豆视频 | 亚洲精品电影院 | 日韩黄色免费视频 | 美女扒开尿口给男人捅 | 噜噜噜视频 | 亚洲日日夜夜 | 欧美成人综合网站 | 国产又粗又猛又黄视频 | 青草久久网 | 福利一区在线观看 | 欧美野外猛男的大粗鳮 | 久久欧| 99久久国产精 | xxx精品 | 午夜天堂影院 | 99久久精品日本一区二区免费 | 少妇高潮一区二区三区在线 | 欧美一区欧美二区 | 亚洲一区二区免费看 | 亚洲色图国产视频 | 亚洲国产在 | 制服丝袜av一区二区三区下载 | 影音先锋久久久 | 男女超爽视频免费播放 | 欧美电影一区二区三区 | 亚洲毛片精品 | 国产这里只有精品 | 国产午夜精品免费一区二区三区视频 | 日韩亚洲欧美一区二区三区 | 亚洲精品电影在线观看 | 91丨porny丨海角社区 | 国产噜噜噜噜噜久久久久久久久 | 亚洲天堂av线 | 精品久久久久久久中文字幕 | 国产色影院 | 女十八毛片 | 狠狠av | 国产福利资源 | 欧美激情第三页 | 亚洲Av无码成人精品区伊人 | 国产精品入口久久 | 日本v视频| 日韩精品视频在线观看网站 | 国产欧美在线视频 | 农村老熟妇乱子伦视频 | 二十四小时在线更新观看 | 51ⅴ精品国产91久久久久久 | 亚洲情涩 | 亚洲激情成人 | 午夜一二区 | 操操操网 | 国产精品自拍亚洲 | 日本黄色aaa | 欧美性生活在线视频 | 狼人伊人干 | 国产又大又黄又粗 | 玉女心经是什么意思 | 亚洲乱码国产乱码精品精大量 | 日韩影视一区二区三区 | 成人在线观看视频网站 | 五月天色网站 | 久久精品一二区 | 91大神在线免费观看 | 日批毛片 | 欧美爱爱小视频 | 91视频在线观看 | 亚洲成熟女性毛茸茸 | 91精品国产综合久久精品图片 | 成人免费在线观看av | 国产精品wwww | 六月丁香婷婷综合 | 99re视频这里只有精品 | 国产自在线 | 国产欧美精品久久 | 国产精品综合久久久久久 | 亚洲男人在线天堂 | 欧美日韩人妻精品一区二区三区 | 欧美人人爽 | 国产三级视频在线播放 | 狼人综合av | 少妇一边呻吟一边说使劲视频 | av资源库| 日本成人精品视频 | 日本黄色生活片 | 一级久久久久久久 | 动漫av网站| 韩日视频| 亚洲一区二区三区国产 | 欧美精品一区在线发布 | 久久午夜片 | 久久中文字幕在线观看 | 成人h动漫精品一区二区器材 | 国产剧情一区二区 | 午夜67194 | 无码人妻少妇色欲av一区二区 | 校园春色中文字幕 | 灌满闺乖女h高h调教尿h | 草莓视频在线观看18 | 国产香蕉视频在线观看 |