這篇文章主要介紹如何使用Hive中自定義UDAF函數(shù)實現(xiàn)統(tǒng)計區(qū)域產(chǎn)品用戶訪問排名,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供京口網(wǎng)站建設(shè)、京口做網(wǎng)站、京口網(wǎng)站設(shè)計、京口網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、京口企業(yè)網(wǎng)站模板建站服務(wù),十載京口做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
UDAF實現(xiàn)方法:
1,用戶的UDAF必須繼承了org.apache.hadoop.hive.ql.exec.UDAF;
2,用戶的UDAF必須包含至少一個實現(xiàn)了org.apache.hadoop.hive.ql.exec的靜態(tài)類,諸如實現(xiàn)了 UDAFEvaluator
3,一個計算函數(shù)必須實現(xiàn)的5個方法的具體含義如下:
init():主要是負(fù)責(zé)初始化計算函數(shù)并且重設(shè)其內(nèi)部狀態(tài),一般就是重設(shè)其內(nèi)部字段。一般在靜態(tài)類中定義一個內(nèi)部字段來存放最終的結(jié)果。
iterate():每一次對一個新值進行聚集計算時候都會調(diào)用該方法,計算函數(shù)會根據(jù)聚集計算結(jié)果更新內(nèi)部狀態(tài)。當(dāng)輸 入值合法或者正確計算了,則 就返回true。
terminatePartial():Hive需要部分聚集結(jié)果的時候會調(diào)用該方法,必須要返回一個封裝了聚集計算當(dāng)前狀態(tài)的對象。
merge():Hive進行合并一個部分聚集和另一個部分聚集的時候會調(diào)用該方法。
terminate():Hive最終聚集結(jié)果的時候就會調(diào)用該方法。計算函數(shù)需要把狀態(tài)作為一個值返回給用戶。
mapreduce階段調(diào)用函數(shù)
MAP
init()
iterate()
terminatePartial()
Combiner
merge()
terminatePartial()
REDUCE
init()
merge()
terminate()
一、自定義UDAF函數(shù)
點擊(此處)折疊或打開
此處)折疊或打開
DROP TEMPORARY FUNCTION user_click;
add jar /data/hive_udf-1.0.jar;
CREATE TEMPORARY FUNCTION user_click AS 'hive.org.ruozedata.UserClickUDAF';
三、調(diào)用自定義UDAF函數(shù)處理數(shù)據(jù)
點擊(此處)折疊或打開
insert overwrite directory '/works/tmp1' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
select regexp_replace(substring(rs, instr(rs, '=')+1), '}', '') from (
select explode(split(user_click(pcid, pcname, type),',')) as rs from (
select * from (
select '-2' as type, product_id as pcid, product_name as pcname from product_info
union all
select '-1' as type, city_id as pcid,area as pcname from city_info
union all
select count(1) as type,
product_id as pcid,
city_id as pcname
from user_click
where action_time='2016-05-05'
group by product_id,city_id
) a
order by type) b
) c
四、創(chuàng)建Hive臨時外部表
點擊(此處)折疊或打開
create external table tmp1(
city_name string,
product_name string,
rn string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
location '/works/tmp1';
五、-統(tǒng)計最終區(qū)域前3產(chǎn)品排名
點擊(此處)折疊或打開
select * from (
select city_name,
product_name,
floor(sum(rn)) visit_num,
row_number()over(partition by city_name order by sum(rn) desc) rn,
'2016-05-05' action_time
from tmp1
group by city_name,product_name
) a where rn <=3
六、統(tǒng)計結(jié)果
以上是“如何使用Hive中自定義UDAF函數(shù)實現(xiàn)統(tǒng)計區(qū)域產(chǎn)品用戶訪問排名”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
名稱欄目:如何使用Hive中自定義UDAF函數(shù)實現(xiàn)統(tǒng)計區(qū)域產(chǎn)品用戶訪問排名
文章來源:http://vcdvsql.cn/article12/pehidc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、網(wǎng)站設(shè)計公司、企業(yè)網(wǎng)站制作、網(wǎng)站內(nèi)鏈、品牌網(wǎng)站制作、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)