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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hive--udf函数(开发-4种加载方式)

發(fā)布時間:2025/7/14 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive--udf函数(开发-4种加载方式) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

UDF函數(shù)開發(fā)

標(biāo)準(zhǔn)函數(shù)(UDF):以一行數(shù)據(jù)中的一列或者多列數(shù)據(jù)作為參數(shù)然后返回解雇歐式一個值的函數(shù),同樣也可以返回一個復(fù)雜的對象,例如array,map,struct。

聚合函數(shù)(UDAF):接受從零行到多行的零個到多個列,然后返回單一值。例如sum函數(shù)。

生成函數(shù)(UDTF):接受零個或者多個輸入,然后產(chǎn)生多列或者多行輸出。

udf函數(shù)開發(fā)

當(dāng)Hive提供的內(nèi)置函數(shù)無法滿足你的業(yè)務(wù)處理需要時,此時就可以考慮使用用戶自定義函數(shù),用戶自定義函數(shù)(user defined function),針對單條記錄。編寫一個UDF,需要繼承UDF類,并實現(xiàn)evaluate()函數(shù)。在查詢執(zhí)行過程中,查詢中對應(yīng)的每個應(yīng)用到這個函數(shù)的地方都會對這個類進行實例化。對于每行輸入都會調(diào)用到evaluate()函數(shù)。而evaluate()函數(shù)處理的值會返回給Hive。同時用戶是可以重載evaluate方法的。Hive會像Java的方法重載一樣,自動選擇匹配的方法。

準(zhǔn)備數(shù)據(jù):

littlebigdata.txt

edward capriolo,edward@media6degrees.com,2-12-1981,209.191.139.200,M,10 bob,bob@test.net,10-10-2004,10.10.10.1,M,50 sara connor,sara@sky.net,4-5-1974,64.64.5.1,F,2

創(chuàng)建表:

create table if not exists littlebigdata( name string, email string, bday string, ip string, gender string, anum int ) row format delimited fields terminated by ',';

加載數(shù)據(jù):

load data local inpath 'littlebigdata.txt' into table littlebigdata;

代碼示例:

import java.text.SimpleDateFormat; import java.util.Date; import org.apache.hadoop.hive.ql.exec.UDF; import org.junit.Test;public class UDFZodiacSign extends UDF {private SimpleDateFormat df ;public UDFZodiacSign() {df = new SimpleDateFormat("MM-dd-yyyy");}public String evaluate(Date bday){return evaluate(bday.getMonth(),bday.getDay());}public String evaluate(String bday){Date date =null;try{date = df.parse(bday);}catch(Exception ex){System.out.println("異常");ex.printStackTrace();return null; }return evaluate(date.getMonth()+1,date.getDay());}public String evaluate(Integer month,Integer day){if(month ==1){if(day<20){return "Capricorn";}else{return "Aquarius";}}if(month ==2){if(day<19){return "Capricorn";}else{return "Pisces";}}if(month ==3){if(day<20){return "Pisces";}else{return "Aries";}}if(month ==4){if(day<20){return "Aries";}else{return "Taurus";}}if(month ==5){if(day<20){return "Taurus";}else{return "Gemini";}}if(month ==6){if(day<21){return "Gemini";}else{return "Cancer";}}if(month ==7){if(day<22){return "Cancer";}else{return "Leo";}}if(month ==8){if(day<23){return "Leo";}else{return "Virgo";}}if(month ==9){if(day<22){return "Virgo";}else{return "Libra";}}if(month ==10){if(day<24){return "Libra";}else{return "Scorpio";}}if(month ==11){if(day<22){return "Scorpio";}else{return "Sagittarius";}}if(month ==12){if(day<22){return "Sagittarius";}else{return "Capricorn";}}return null;}@Testpublic void test() {UDFZodiacSign aa = new UDFZodiacSign();String str = aa.evaluate("01-10-2004");System.out.println(str);}} udf代碼示例

函數(shù)使用

加載:

add jar testUDF-0.0.1-SNAPSHOT.jar; create temporary function zodiac as "cn.rtmap.bigdata.hive.testUDF.udf.UDFZodiacSign";

查詢:

select name,bday,zodiac(bday) from littlebigdata;

結(jié)果:

edward capriolo 2-12-1981 Capricorn bob 10-10-2004 Libra sara connor 4-5-1974 Aries

注意:這個地方可能有報錯,反正我是遇到了!

解決辦法:

1,修改jdk的版本 可能版本太高。 2,刪除META-INF 文件中*.SF的文件,這個是依賴包有沖突導(dǎo)致的。 3.在MANIFEST.MF 中添加Main-Class: cn.rtmap.bigdata.hive.testUDF.udf.UDFZodiacSign,這個可以在maven中創(chuàng)建好。

UDF四種加載方式

第一種:

是最常見但也不招人喜歡的方式是使用ADD JAR(s)語句,之所以說是不招人喜歡是,通過該方式添加的jar文件只存在于當(dāng)前會話中,當(dāng)會話關(guān)閉后不能夠繼續(xù)使用該jar文件,最常見的問題是創(chuàng)建了永久函數(shù)到metastore中,再次使用該函數(shù)時卻提示ClassNotFoundException。所以使用該方式每次都要使用ADD JAR(s)語句添加相關(guān)的jar文件到Classpath中。

第二種:

是修改hive-site.xml文件。修改參數(shù)hive.aux.jars.path的值指向UDF文件所在的路徑。,該參數(shù)需要手動添加到hive-site.xml文件中。 <property> <name>hive.aux.jars.path</name> <value>file:///jarpath/all_new1.jar,file:///jarpath/all_new2.jar</value> </property>

?第三種:

是在${HIVE_HOME}下創(chuàng)建auxlib目錄,將UDF文件放到該目錄中,這樣hive在啟動時會將其中的jar文件加載到classpath中。(推薦)

?第四種:

是設(shè)置HIVE_AUX_JARS_PATH環(huán)境變量,變量的值為放置jar文件的目錄,可以拷貝${HIVE_HOME}/conf中的hive-env.sh.template為hive-env.sh文件,并修改最后一行的#export HIVE_AUX_JARS_PATH=為exportHIVE_AUX_JARS_PATH=jar文件目錄來實現(xiàn),或者在系統(tǒng)中直接添加HIVE_AUX_JARS_PATH環(huán)境變量。

轉(zhuǎn)載于:https://www.cnblogs.com/chushiyaoyue/p/6632090.html

總結(jié)

以上是生活随笔為你收集整理的hive--udf函数(开发-4种加载方式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚州中文字幕 | 97在线免费观看视频 | 日韩av大片在线观看 | 一本色道久久综合亚洲精品图片 | 美女毛片 | 国产人人爱 | av啊啊| 国产中文字幕在线免费观看 | 成人深夜电影 | 欧美成人午夜精品久久久 | 少妇人妻好深好紧精品无码 | 精品国产成人av在线免 | 精品一卡二卡三卡 | 欧亚一区二区三区 | jizz日本18| 五月天av在线 | 精品国产自在精品国产精小说 | 亚洲天堂123 | 国产乱xxⅹxx国语对白 | 在线观看污污网站 | 日本黄网站 | 中文幕无线码中文字夫妻 | 国产农村妇女精品 | 欧美在线视频二区 | 欧美私人网站 | 一区二区av在线 | 亚洲成人免费网站 | 国产精品免 | 中文字幕免费观看视频 | 日韩在线你懂的 | 香蕉啪啪网| 五月天国产在线 | 免费视频黄色 | 91综合国产 | 狠狠干五月| 日韩成人在线网站 | 借种(出轨高h) | 亚洲在线看片 | 欧美人与动性xxxxx杂性 | 久热av在线 | 色欧美88888久久久久久影院 | 黄色三级在线观看 | 亚洲国产精品视频在线观看 | 欧美成一区二区三区 | 国产青青操 | 欧美老女人视频 | 超碰97在线资源 | 在线观看网址你懂的 | 久久久亚洲av波多野结衣 | 性生交大片免费看狂欲 | 我们的生活第五季在线观看免费 | 亚洲色婷婷久久精品av蜜桃 | 在线观看a网站 | 奇米影视盒 | 狠狠操在线视频 | 成人精品在线视频 | 久久久亚洲成人 | 自拍99页| 日本高清不卡码 | 精品少妇一区二区三区密爱 | 男女爱爱动态图 | 国产精品影片 | 一区二区三区中文视频 | 亚洲一卡二卡三卡四卡 | 亚洲欧美色图 | 欧美国产日韩一区二区三区 | 亚洲精品人妻av | 少妇高潮喷水在线观看 | 粉嫩小泬无遮挡久久久久久 | 日本少妇做爰全过程毛片 | 久久午夜伦理 | gogo人体做爰大胆视频 | 3d动漫精品啪啪一区二区三区免费 | 日本激情影院 | 亚洲中文字幕无码专区 | 男女被到爽流尿 | 亚洲区一区二 | 精品人妻人人做人人爽夜夜爽 | 黄色网址你懂的 | 伦hdwww日本bbw另类 | 叶全真三级 | 老公吃小头头视频免费观看 | 成人国产在线视频 | 亚洲三级欧美 | 欧美日本在线播放 | 教练含着她的乳奶揉搓揉捏动态图 | 在线观看日韩一区二区 | 私密spa按摩按到高潮 | 国产原创精品 | 国产视频一二三 | 邻居少妇张开腿让我爽了在线观看 | 精品少妇一区二区三区密爱 | 国产做爰全免费的视频软件 | 在线免费观看视频你懂的 | 国内精品久久久久久久久久久 | 天堂久久爱| 免费观看色 | 日本成人在线视频网站 | 广州毛片|