




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Alibaba
天池實踐手冊
刖百
本手冊從天池選手的角度出發(fā),通過具體的案例場景引導(dǎo)用戶使用御膳房平臺進行數(shù)據(jù)開發(fā)、數(shù)據(jù)
建模以及預(yù)測。
本手冊將從以下幾個步驟來描述如何使用御膳房進行數(shù)據(jù)分析和建模:
?課題介紹
?環(huán)境和賬號
?獲取數(shù)據(jù)
?實現(xiàn)步驟
由于是基于特定案例引導(dǎo),本文展示的僅僅是ODPS和算法功能的冰山一角。關(guān)于詳細的ODPS
和算法功能,可以通過在線幫助手冊了解更多。
請參考ODPS在線幫助手冊。主要參考模塊:根本介紹、常用命令、SQL語法,MR語法。
關(guān)于MR的使用和配置方法請參考御膳房用戶手冊。
內(nèi)容
前言I
內(nèi)容II
1課題介紹1
1.1課題介紹錯誤!未定義書簽。
數(shù)據(jù)說明1
輸出要求2
評估指標3
1.2解題思路3
2環(huán)境、賬號4
2.1登錄御膳房錯誤!未定義書簽。
3獲取數(shù)據(jù)5
3.1工程首頁5
3.2查看數(shù)據(jù)5
4實現(xiàn)步驟6
4.1數(shù)據(jù)開發(fā)平臺的使用(以下也稱IDE)7
準備工作7
數(shù)據(jù)分析8
特征工程14
4.2PAI平臺29
PAI簡介29
數(shù)據(jù)抽樣29
建模和評估32
PAI命令及模型同步36
線上測試集的訓(xùn)練和預(yù)測36
名詞解釋37
修訂歷史38
1課題介紹
1.1背景
隨著移動電商業(yè)務(wù)的快速開展,用戶對移動端網(wǎng)絡(luò)的訪問是隨時隨地的,具有更豐富
的場景數(shù)據(jù)。如何在這些巨大的信息數(shù)據(jù)中快速挖掘出對我們有用的信息已成為當前
急需解決的問題。
對于移動電商來說,可以運用這些有用的信息以及個性化技術(shù)的手段,對用戶進行一
系列的個性化推薦,幫助用戶從這些網(wǎng)絡(luò)過量的信息里面篩出他所需要的信息,提升
移動端用戶的用戶體驗,提升個性化推薦引導(dǎo)的成交率,從而到達精準營銷(Precision
marketing)的目的。
如下是一個簡單的個性化推薦的流程:
1.2課題介紹
本課題以阿里巴巴移動電商平臺的真實用戶-商品行為數(shù)據(jù)為根底,同時提供移動時代
特有的位置信息。您需要通過大數(shù)據(jù)和算法構(gòu)建面向移動電子商務(wù)的商品推薦模型,
挖掘數(shù)據(jù)背后豐富的內(nèi)涵,為移動用戶在適宜的時間、適宜的地點精準推薦適宜的內(nèi)
容。
在真實的業(yè)務(wù)場景下,我們往往需要對所有商品的一個子集構(gòu)建個性化推薦模型。在
完成這件任務(wù)的過程中,我們不僅需要利用用戶在這個商品子集上的行為數(shù)據(jù),往往
還需要利用更豐富的用戶行為數(shù)據(jù)。
如下是一個真實的業(yè)務(wù)場景:
給出一定量用戶在時間段11月18日~12月18H內(nèi)的移動端行為數(shù)據(jù)(D),
需要預(yù)測12月19日用戶對商品子集(P)的購置數(shù)據(jù)。具體的數(shù)據(jù)說明下面將會詳
細介紹。
1.2.1數(shù)據(jù)說明
提供的數(shù)據(jù)包含兩個局部。第一局部是用戶在商品全集上的移動端行為數(shù)據(jù)(D),
表名為tianchi_mobile_recommend_train_user,包含如下字段:
字段字段說明提取說明
userjd用戶標識抽樣&字段脫敏
itemjd商品標識字段脫敏
behaviorjype用戶對商品的行為類型包括瀏覽、收藏、加購物車、購
置,對應(yīng)取值分別是1、2、3、4o
user_geohash用戶位置的空間標識,可以為空由經(jīng)緯度通過保密的算法生成
item_category商品分類標識字段脫敏
Time行為時間精確到小時級別
D集合的記錄顯示如下:
每一行代表了用戶userjd對屬于分類item_catsgory的物品itemjd在time這個
時間于地點user_geohash發(fā)生了交互,交互類型是behavio「_lype。
behaviorjype包括瀏覽、收藏、加購物車、購置,對應(yīng)取值分別是1、2、3、4。
給出的一共包含31天的交G數(shù)據(jù),最后要預(yù)測第32天有哪些user會購置哪些計em。
第二個局部是商品『集(P),表名為tianchi_mobile_recommend_train_item,包含
如下字段:
字段字段說明提取說明
itemjd商品標識抽樣&字段脫敏
item_geohash商品位置的空間標識,可以為空由經(jīng)緯度通過保密的算法生成
item_category商品分類標識字段脫敏
這局部的數(shù)據(jù),&tianchi_mobile_recommend_train_user表中出現(xiàn)的物品itemid
的?個子集。官方的第32天的會發(fā)生購置的user,item中的item都是這個數(shù)據(jù)表中
的item,所以我們預(yù)測的user,item需要根據(jù)這人文件來過濾掉一些結(jié)果。
訓(xùn)練數(shù)據(jù)包含了抽樣出來的一定量用戶在一個月時間(11.18-12.18)之內(nèi)的移動端
行為數(shù)據(jù)(D),評分數(shù)據(jù)是這些用戶在這個一個月之后的一天(12.19)對商品子集
(P)的購置數(shù)據(jù)。您需要使用訓(xùn)練數(shù)據(jù)建立推薦模型,并輸出用戶在接下來一天對
商品子集購置行為的預(yù)測結(jié)果。
1.2.2輸出要求
完成用戶對商品子集p的購置預(yù)測之后,需要將結(jié)果放入指定格式的數(shù)據(jù)表(非分區(qū)
表)中,要求結(jié)果表名為:tianchi_mobile_recommendation_predict,包含userjd
和itemjd兩列(均為string類型),要求去除重復(fù)。
表名:tianchi_mobile_recommendation_predict
結(jié)果表樣例:
字段字段類型例如
UserjdString100001
ItemjdString12900
1.2.3評估指標
比賽采用經(jīng)典的精確度(precision)、召回率(recall)和F1值作為評估指標。具體計算
公式如下:
其中PredictionSet為算法預(yù)測的購置數(shù)據(jù)集合,ReferenceSet為真實的答案購置數(shù)
據(jù)集合。我們以F1值作為最終的唯一評測標準。
1.3解題思路
顯然,該問題可以轉(zhuǎn)為一個二分類問題:某個用戶對某個商品是否會購置?
?分類方法:二分類
最終只有兩種結(jié)果:1:購置:o:不購置
?樣本選取
樣本選取一〉有交互(即:用戶對商品有行為,包括瀏覽、收藏、力II購、購置)的P
子集。
分析在哪一天交互的樣本可能會在19號購置?16號,17號,18號?
可以基于18號的購置數(shù)據(jù),分析16、17號的行為數(shù)據(jù)在18號購置的概率。
?特征
分析什么樣的用戶在什么時候?qū)κ裁礃拥纳唐酚羞^什么樣的操作之后,可能會在19
號購置?比方:是否曾經(jīng)買過?商品銷量?加購物車?
?模型
分類、回歸。如LR、RF、GBDT等。
下面我們將圍繞這個課題,描述如何在御膳房平臺完成一系列的實現(xiàn)步驟。
2環(huán)境&賬號
1)登錄御膳房首頁。點擊右上角的〈登錄,,輸入已經(jīng)注冊好的淘寶、阿里云賬號,如
下列圖所示:
圖1御略房登錄界面
注:
?如果您還沒有淘寶賬號或者阿里云賬號,可以在上圖點擊〈注冊淘寶賬號,或〈注
冊阿里云賬號》完成注冊。
?如果已經(jīng)注冊,也可以使用號碼或郵箱登錄。
2)填寫注冊信息。
首次登錄,需填寫注冊信息。
單擊〈登錄〉,頁面跳轉(zhuǎn)到用戶信息注冊頁面。請使用真實信息,完成所有必鎮(zhèn)工程
(號、Email、聯(lián)系人為必填項,注:號應(yīng)與淘寶賬號綁定),閱讀并勾選“同
意御膳房協(xié)議”。
圖2用戶信息注冊
3)點擊〈下一步》后,您的賬號已經(jīng)完成了在御膳房的注冊。
3獲取數(shù)據(jù)
當用戶登錄后,即可進入天池大賽授予的特定工程,進行數(shù)據(jù)開發(fā)/處理/建模工作。
下面我們先來看看如何獲取和查看數(shù)據(jù)。
3.1工程首頁
可以從兩個入口進入“工程〃。
1)點擊[御膳房->數(shù)據(jù)中心,工作臺],用戶可以在這個界面查看自己對應(yīng)的資產(chǎn),工
程名稱以及角色。點擊工程名,即可進入工程。
圖3-進入工程入口(1)
2)點擊[數(shù)據(jù)引擎,私有區(qū)],可以看到工程列表,點擊工程名稱后進入工程。
圖4進入工程入口(2)
圖5進入工程入口(2)
3)進入工程后,界面如下:
圖6進入工程
3.2查看數(shù)據(jù)
1)進入工程首頁后,點擊[工程數(shù)據(jù)-A數(shù)據(jù)資源,紐織內(nèi)申請的數(shù)據(jù)],即可查看組織
內(nèi)授權(quán)的表以及所屬工程(來源工程)信息:
圖7查看odps表
注:
在數(shù)據(jù)開發(fā)工作臺使用具體的表的時候,必須加上所屬工程前綴。如:用戶行為表
tianchi_mobile_recommend_train_user,查看到其所屬工程為tianchi_data,那么在
數(shù)據(jù)開發(fā)工作臺中引用時,需這樣:tianchi_data.
tianchimobilerecommendtrainuser。
4實現(xiàn)步驟
接下來我們將介紹如何完成上述課題,主要包含以下幾個主要的步驟:
1)在數(shù)據(jù)開發(fā)平臺利用ODPSSQL進行數(shù)據(jù)分析:
?統(tǒng)計總的用戶行為記錄
?統(tǒng)計所給數(shù)據(jù)中每天各種行為類型的記錄數(shù),了解每天會有多少瀏覽、收藏、加
購、購置,觀察是否有波動。
?鎖定在P上有過交互的用戶行為。
?分析前一天加購、收藏、瀏覽對后一天購置的影響。取12/18為后一天,拿12/17
的數(shù)據(jù)來驗證該設(shè)想。
?計算評估指標。
?提交結(jié)果表。
2)特征工程:可以使用ODPSSQL進行特征提取,也可以使用MR/UDF/GRAPH進
行特征工程。這里主要介紹使用UDF進行特征提取,MR/GRAPH的用法與之類似。
?Eclipse工具的下載和安裝
?新建工程(MavenProject)
?程序開發(fā)以及提交
?利用UDF在數(shù)據(jù)開發(fā)工作臺抽取特征,詳細步驟如下:
?樣本選?。海ㄕ龢颖荆┓謩e以2023/12/17的購置,12/18的購置來構(gòu)建驗證集、
測試集。
?特征工程:利用已經(jīng)構(gòu)建的UDF函數(shù)來統(tǒng)計user-item對的點擊,收藏,力口購,
購置次數(shù)。
?結(jié)合特征構(gòu)建驗證集和測試集,包含訓(xùn)練和測試。
?檢查正負樣本比例。
?轉(zhuǎn)換特征的數(shù)據(jù)格式。
3)PAI平臺的使用
?數(shù)據(jù)抽樣
?負樣本抽樣1/15
?樣本合并
?建模和評估,包括:
?邏輯回歸
?隨機森林
?預(yù)測和評估
?PAI命令的執(zhí)行以及模型同步
?線上測試集的訓(xùn)練和預(yù)測
4.1數(shù)據(jù)開發(fā)平臺的使用(以下也稱IDE)
用戶在數(shù)據(jù)開發(fā)工作臺中以編寫和運行基于ODPS的SQL、MapReduce.UDF和
Grapho
其中,SQL、MapReduc和UDF的編寫語法參考ODPS文檔,請點擊這里。
MapReduc.UDF卻Graph的配置請參考這里。
4.1.1準備工作
1)進入工程首頁:
圖8工程首頁
2)點擊“數(shù)據(jù)開發(fā)",即可進入數(shù)據(jù)開發(fā)工作臺:
圖9數(shù)據(jù)開發(fā)工作臺
為了方便管理代碼,可以新建一個文件夾,把自己的代碼都放在這個文件夾中(天池
歷屆比賽中,通常都是一個隊伍所有成員共享一個project)。
3)新建文件夾。
右鍵點擊“工作流”并點擊<+文件夾,,新增一個工作文件夾,輸入文件夾名稱,選擇
文件夾位置,提交即可,如:
圖10新建文件夾
4)新增工作流節(jié)點。
在數(shù)據(jù)開發(fā)工作臺左側(cè)導(dǎo)航選擇“數(shù)據(jù)開發(fā)”。
圖11數(shù)據(jù)開發(fā)圖標
點擊圖標,選擇“工作流節(jié)點"。
圖12"+”圖標
右鍵點擊文件夾,匕方“nj_work〃,并點擊v+工作流節(jié)點,,在頁面配置一個ODPS
SQL節(jié)點如下:
圖13新增工作流節(jié)點
點擊〈提交〉,此時在新的頁面上就可以編寫ODPSSQL代碼了?,F(xiàn)在我們可以查一
Ttianchi_mobile_recommend_train_user的表結(jié)構(gòu),如下:
圖14運行ODPS命令
點擊A.運行代碼(或按F8鍵)。
注意:
對于選手而言,所有的操作只需要在開發(fā)環(huán)境運行,也就是說,不需要提交數(shù)據(jù)到生
產(chǎn)環(huán)境,也不需要進行調(diào)度和發(fā)布。
如上述介紹,在數(shù)據(jù)開發(fā)工作臺內(nèi)運行的表或資源都屬于開發(fā)環(huán)境,如果需要發(fā)布到
生產(chǎn)環(huán)境,那么需要通過發(fā)布管理模塊將工作流節(jié)點調(diào)度并發(fā)布,方可同步到生產(chǎn)環(huán)
境。具體描述請參考御膳房最正確實踐之數(shù)據(jù)同步章節(jié)1)。
4.1.2數(shù)據(jù)分析
下面我們根據(jù)上面的課題在IDE上先進行相關(guān)的數(shù)據(jù)分析。
給出一定量用戶在之內(nèi)的移動端行為數(shù)據(jù)(D),需要預(yù)測12.19對商
品子集(P)的購置數(shù)據(jù)。行為分為四種:1(瀏覽),2(收藏),3(加購物車),4(購置)。
首先,由于賽題數(shù)據(jù)來源于其他project(工程空間),為方便起見及后續(xù)在算法平臺(PAI)
中使用,可以考慮將工程表拷貝到本隊伍所在工程空間。
SQL如下:
Createtabletianchi_mobile_recommend_train_useras
select*fromtianchi_data.tianchLmobile_recommend_train_user;
Createtabletianchi_mobile_recommend_train_it9mas
select*fromtianchidata.tianchimobilerecommendtrainitem;
下面我們就可以在IDE利用ODPSSQL進行相關(guān)的數(shù)據(jù)統(tǒng)計:
?統(tǒng)計D集合的數(shù)量:
selectcount(*)fromtianchimobilerecommendtrainuser;
一包含了58億用戶的行為記錄。
?統(tǒng)計針對P子集的用戶行為數(shù)據(jù):
createtablet_mj_p_useras
select
t.*,b.itemgeohasnfromtianchimobilerecomnendjrainusert
jointianchi_moble_recommend_train_itembonb.item_id=t.item_idandb.item_
category=t.item_category;
selectcount(1)fromtmjpuser;
—10.7億
?統(tǒng)計所給數(shù)據(jù)中每天各種行為類型的記錄數(shù),了解每天會有多少瀏覽、收藏、加
購、購置,觀察是否有波動:
select
substr(time,1,10)asday
,behavior_type
,count(1)ent
from
tianchi_mobilerecommendJrainuser
groupby
substr(time,1,10)
,behaviortype;
從用戶的購置行為動機和流程來看,人們通常在購置時會經(jīng)歷瀏覽一收藏/加到購物車
一下單付款這一系列動作,有的可能會搜索后就直接購置,有的可能會操作得多一點,
反復(fù)挑選和比擬。如果說用戶都已經(jīng)把寶貝加到購物車了,那么購置的概率會不會更
高?最近加到購物車的是不是應(yīng)該更有可能被購置?基于這個設(shè)想,下面我們示范下
如何在數(shù)據(jù)平臺上進行這個分析,并完成結(jié)果提交。這是一個通過簡單規(guī)那么來判斷
購置從而提交結(jié)果的例如,較為簡單粗暴,但可以讓我們先熟悉下從拿到課題到提交
結(jié)果的整個流程,以及初嘗結(jié)果驗證設(shè)想。
1)由于所給數(shù)據(jù)tianchLmobile_recommend_train_user為用戶在所有商品類目上的
行為,而要預(yù)測的是在商品子集P上的購置,故先鎖定在P上有過交互的用戶行為:
createtablet_mj_p_useras
select
t.*,b.item_geohas*ifromtianchi_mobile_recomriend_train_usert
jointianchi_moble_recommend_train_itembonb.item_id=t.itemjdandb.item_
category=t.item_category;
selectcount(1)fromt_mj_p_user;
……1074139328(用戶對P子集商品的交互記錄數(shù))
selectcount(1)fromt_mj_p_userwherebehavior_type=4;
9309353(其中對P子集商品有購置的記錄數(shù))
selectcount(1)from
(select
userjd
,item_id
,count(1)ent
from
t_mj_p_user
groupby
userjd
JtemJd
)t;
——202430141[user,item]對
2)分析前一天加購、收藏、瀏覽對后一天購置的影響。取12/18為后一天,拿12/17
的數(shù)據(jù)來驗證該設(shè)想。
createtablet_mj_u_i_1dayas
select
userjd
JtemJd
,casewhensubstr(time,1,10)='2023-12-17'andbehavior_type=1then1
else0endasis_1day_view
,casewhensubstr(time,1,10)=2023-12-17*andbehavior_type=2then1
else0endasis_1dayjav
,casewhensubstr(time,1,10)=2023-12-17*andbehavior_type=3then1
else0endasis_1day_cart
,casewhensubstr(time,1,10)=2023-12-17'andbehaviorjype=4then1
else0endasis_1day_buy
,casewhensubstr(time,1,10)=2023-12-18'andbehavior_type=4then1
else0endasis_buy
from
tmjpuser;
計算評估指標:
select
precision
,recall
,2*precision*recall/(precision+recall)asf1
from
(select
hit_cnt/p_cntasprecision
,hit_cnt/r_cntasrecall
from
(select
sum(if(a.user_idisnotnullanda.itemjdisnotnullandb.userjdis
notnullandb.itemjdisnotnull,1,0))ashit_cnt一命中
,if(sum(a.r_cnt)isnull,0,sum(a.r_cnt))asr_cnt一實際
,if(sum(b.p_cnt)isnull,0,sum(b.p_cnt))asp_cnt--預(yù)測
from
(
selectuserjdjtemjd,count(1)asr_cnt
from
day
where
is_buy=1
anduserjdisnotnull
anditemJdisnotnull
groupbyuser_id,itemjd
)a
fullouterjoin
(
selectuserjd.itemjd,count(1)aso_cnt
from
t_mj_u_i_1day
where
is_1day_cart=1
anduserjdisnotnull
anditemjdisnotnull
groupbyuserjd,itemjd
)b
ona.userjd=b.userjdanda.iterrjd=b.itemjd
)t
)tb;
返回如下結(jié)果,可以看到F1=2.99%,召回率高于準確率,均有較大提升空間:
H115返回結(jié)果
3)提交結(jié)果:
以比賽要求的12/19為預(yù)測日期,將用戶在12/18對商品子集P加購最多的商品作為
預(yù)測結(jié)果tianchi_mobile_recommendation_predict,生成該表即完成了提交,注:大
賽進行的時候,天池的評測系統(tǒng)會自動去掃描各project中指定命名的表(本例中即:
tianchi_mobile_recommendation_prodict)并評測。
droptableifexiststianchi_mobile_recommendation_predict;
createtabletianchi_mobile_recommendation_predict
as
select
userjd
,itemjd
from
(
select
Lserjd
,itemjd
,row_number()over(partitionbyuserjdorderbynumdesc)as
rank
from
(
select
a.userjd
,a.item_id
,a.num
from
select
userid
JtemJd
,count(1)asnum
from
tianchimobile_recommendtrainuser
where
substrftime,1,10)='2023-12-18,
andbehavior_type=3
groupby
userjd
,item_id
)a
join
(
selectdistinct
itemid
from
tianchi_mobile_recommend_train_item
)b
ona.itemjd=b.itemjd
v/here
b.itemjdisnotnull
)c
)d
whererank<=1;
counttianchi_mobile_recommendation_predict;——166068(與上述數(shù)據(jù)分析時所統(tǒng)
計的每日購置數(shù)據(jù)最相仿)
基于這個提交的結(jié)果,可以拿到這樣一個分數(shù):準確率=1%,召回率=0.9%,F1=0.96%o
說明:
上述SQL語法涉及到的主要知識點包括:
?創(chuàng)立表/刪除表
?聚合函數(shù)count
?字符串函數(shù)substr
,Join語法
?row_number函數(shù)
?casewhen/if條件困數(shù)
關(guān)于SQL的更多語法,請參考ODPS用戶手冊。
4.1.3特征工程
經(jīng)過一番數(shù)據(jù)探查和分析,可大致確定深入的解題方案。假設(shè)考慮采取“按用戶?商品
對抽取特征,再進行分類”這樣一種方案,那么接卜來就要抽取特征。假設(shè)我們的特
征使用近1天,3天,7天,10天的用戶行為數(shù)量(點擊數(shù),瀏覽數(shù)…),我僅可以
直接使用sql來抽取特征,或者使用MapReduce(簡稱MR),再或者使用
UDF(user-definedfunction),這些都可以在數(shù)據(jù)產(chǎn)發(fā)下添加相應(yīng)的節(jié)點來完成。以下
演示在平臺上如何配置和使用MR/UDF/Graph實現(xiàn)特征抽取,以UDF為例詳細操作,
MR同理,只是一兩處有些許差異,相應(yīng)的地方也會特別注明。
工具下載
請前往:〃/m2e/下載Eclipse插件。
請前往:///下載Maven插件,建議下載325版本.
下載完畢并解壓安裝后,翻開Eclipse插件,會看到以下界面:
圖16Eclipse主頁面
新建工程
MR&UDF開發(fā)工具全部基于Maven開發(fā),因此使用此工具前應(yīng)該對maven的概念
及根本使用有一定了解。使用IDE來開發(fā)MR&UDF,還要了解如何在IDE中使用相
關(guān)maven插件。
MR&UDF開發(fā)工具通過mavenarchetype機制新建程序工程,御膳房提供
base-mapreduce-archetype>base-udf-archetype和base-graph-archetype三個
archetypes,通過遠程repository可直接使用。
?添加遠程repository
注:請確保機器是上裝有maven,并且Eclipse中已安裝M2Eclipse插件。
1)如果您使用的是MAC系統(tǒng),請在Eclipse中依次點擊〈Preferences->Maven
->Arthetypes>,在翻開的對話框中點擊〈AddRemoteCatalog...>按鈕;如果您使
用的是WINDOWS或其他系統(tǒng),請在Eclipse中依次點擊〈Window-‘Preferences
->Maven->Arthetypes>,在翻開的對話框中點擊〈AddRemoteCatalog...〉按鈕。
IS17添力IIMavenArthetypes
2)在翻開的對話框中,CatalogFile填入,Description填入BaseArchetypes.
然后一路點擊vOK>就完成了遠程repertory添加。
圖18設(shè)定遠程目錄
?新建工程
1)如同新建一般maven工程一樣,在Eclipse中依次點擊vFile->New->Project...>,
在翻開的對話框中選擇[Maven->MavenProject]:
圖19新建Maven工程
2)一路點擊vNext>.在[SelectanArchetypes]界面,Catalog選擇Base
Archetypes,并選中Includesnapshotarchetypes復(fù)選框,此時可以看到列表中
出現(xiàn)base-graph-archetype>base-mapreduce-archetype和base-udf-archetype
三個archetypes,選擇需要創(chuàng)立的程序類型,點擊<Next>。
圖新建hasp-ijdf-arnhptypA
3)以base-udf-archetype為例,點擊〈Next〉后,會進入常規(guī)的maven工程初始化配
置界面。注意Properties列表中會出現(xiàn)幾個御膳房特有的配置項,分別是:
?baseId-用戶在御膳房上的用戶標識
?projectld?用戶要創(chuàng)立程序到哪個御膳房工程ID
?token-工程證書
?idePath-程序?qū)⒁蟼鞯絀DE的哪個工作目錄/文件夾下,需要文件夾已經(jīng)在
IDE中創(chuàng)立好,例如“工作流/寧晶"。
獲取這些配置項的操作步驟如下:
A.點擊v我的賬號,,如下列圖:
圖21獲取我的賬號
B.點擊證書管理,看到工程ID(對應(yīng)到projectld)>用戶標識(對應(yīng)到baseld)、
工程證書1對應(yīng)到token)三個信息:
圖22證書管理
C.配置例如如下列圖:(其中,GroupID和ArtifactId,idePath,functionName
為自定義,注:命名中請勿使用一字符,否那么會報錯;另外3個ID項按照上述
方式獲取并填入)。假設(shè)為UDF,柞應(yīng)的配置會保存于配置文件
src/main/resoLrces/META-INF/base.udf.xml中.
圖23設(shè)定archetype參數(shù)
注:這里將idePath自定義配置成:工作流/寧晶(再次強調(diào)卜,這個文件需要在IDE
中先建好,否那么后續(xù)會報錯),那么當Maven工程開發(fā)完,在eclipse直接提交后,
提交的節(jié)點和對應(yīng)源代碼就會自動在IDE的該目錄下創(chuàng)立。
D.填寫完成后,點擊〈Finish〉就會完成工程創(chuàng)立,隨后即可在Eclipse的工程管
理器中看到新建的工程了。
圖24配置好的工程
程序開發(fā)及提交
.1工程結(jié)構(gòu)
通過archetypes新創(chuàng)立的程序具有完整的mavenproject骨架(如初始化好的pom
文件等)、腳手架代碼(用戶可直接在其中實現(xiàn)自己的業(yè)務(wù))和例如代碼;其中
mapreduce程序還帶有本地運行環(huán)境和mock數(shù)據(jù),用于通過local模式運行
mapreduce程序,以便本地調(diào)試。
下面我們將介紹UDF程序開發(fā)步驟。
.2UDF程序開發(fā)步驟
1)-E程結(jié)構(gòu)
一個新創(chuàng)立的udf程序工程結(jié)構(gòu)如下:(與mapreduce程序類似,但是udf程序目前
不支持本地調(diào)試)
Ilib
|pom.xml
1src
Imain
IIjava
II1my
II1group
I|1myudf
I||MyUDAF.java
I||MyUDF.java
II|MyUDTF.java
II1examples
I||GcdUDF.java
I||NormalizeUDTF.java
I|1VarianceUDAF.java
I1resources
I|META-INF
I1perties
1test
Ijava
I1-my
I1group
I1myudf
1resources
其中,用戶的程序?qū)懺趕rc/main/java下。
2)證書配置
證書文件位于src/main/resources/perties,其中存儲BaseID、Project
ID和Token,是完成鑒權(quán)及身份認證的重要文件,
圖25證書配置頁面
3)配置文件
不管是mapreduce還是udf程序,都有一個主配置文件。這個配置文件是整個工程
的核心,許多重要信息都需要在這里配置。
,形如下列圖。其中:baseld、projectld來源于maven工程初始化配置;functionName
必填,為最終注冊的UDF名稱,即需要在SQL中調(diào)用的函數(shù)名;className-必填,
為實現(xiàn)UDF的class全名。
圖26UDF程序配置文件
4)程序開發(fā)
在src/main/java中新建class,右擊src/main/java并點擊vNew->Package>:
圖27新建package
在彈出的NewJavaPackage對話框中填入根本信息,如:
圖28新建Javapackage
點擊〈Finish》之后,將會在src/main/java節(jié)點下新增”mj.udf"這個節(jié)點,如:
圖29新增的package
右擊mj.udf這個package,并點擊vNew->Class〉。填入Name(LBSUtils)后即可翻
開程序編輯框。
圖30新建Class
在編輯框編寫程序代碼:
packagetaijixiong.udf;
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
publicclassLBSUtls
(
publicstaticintDateSubtract(Stringd1,Stringd2)throwsParseException
(
SimpleDateFormatfmt=newSimpleDateFormat("yyyy-MM-dd");
Datedatel=fmt.parse(dl);
Datedate2=fmt.parse(d2);
return(int)((datel.getTime()-date2.getTime()y(1000L*60*60*24));
)
publicstaticStringJoin(int[]arr,Stringsep)
(
if(arr.length==O)
(
return
)
StringBuffersb=newStringBuffer();
sb.append(arr[0]);
for(inti=1;i<arr.length;i++)
(
sb.append(sep):
sb.append(arr[i]i;
}
returnsb.toString();
)
publicstaticvoidmain(Stringargs[])throwsParseException
(
System.out.println(DateSubtract("2023-02-192O'\"2023-12-18"));
)
}
圖31編寫UDF代碼
采用同樣的方法,開發(fā)ExtractPairCount.java用干統(tǒng)計user-item對的點擊,收藏,
購物車,購置次數(shù)。代碼如下:
packagemj.udf;
importjava.text.ParseException;
importjava.util.Arrays;
importcom.aliyun.odps.udf.ExecutionContext;
importcom.aliyun.odps.udf.UDTF;
importcom.aliyun.odps.udf.annotation.Resolve;
importcom.aliyun.odps.udf.UDFException;
@Resolve({"string,string,bigint,string,string,bigint->string,string,string,string"))
//TODOdefineinputandoutputtypes,e.g.,"string,string->string,bigint".
publicclassExtractPairCountextendsUDTF{
publicStringlastUid="n;
publicStringlastlid=
publicint[]intervals={1,3,7,100);
publicintcurrentindex=0;
publicint[]counts=newint[4*4];
publicStringptime=
?Override
publicvoidsetup(ExecutionContextctx)throwsUDFException
(
)
/**
*UDTFProcess接口
*每條記錄都會調(diào)用此接口。
7
publicvoidprocess(Object[]args)throwsUDFException
(
Stringuid=(String)args[0];
Stringiid=(String)args[1];
intbehavior=((Long)args[2]).intValue();
Stringatime=(String)args[3];
Stringptime=(String)args[4];
intent=((Long)args[5]).intValue();
this.ptime=ptime;
if(uidpareTo(this.lastUid)==0&&iidpareTo(this.lastlid)==0)
{
}
else
{
//newpair
//outputoldpair
if(this.lastllid.length()>0&&this.lastlid.length()>0)
(
this.output();
}
//addnewpair
this.lastllid=uid;
this.lastlid=iid;
this.cearStatus();
)
intdateDiff;
try{
dateDiff=LBSUtils.DateSubtract(ptime,atime);
}catch(ParseExceptione){
//TODOAuto-generatedcatchblock
thrownewRuntimeException(e);
)
while(dateDiff>ervals[this.currentlndex])
{
this.cjrrentlndex+=1;
)
this.counts[this.currentlndex*4+behavio"-1]+=cnt;
)
publicvoidclearStatus()
(
Arrays.fill(this.counts,0);
this.currentlndex=0;
)
publicvoidoutput()throwsUDFException
(
if(this.lastUid.length()>0&&this.lastlid.length()>0)
{
for(inti=O;i<ervals.length-1;i++)
(
for(intk=0;k<4;k++)
(
this.counts[(i+1)*4+k]+=this.counts[i*4+k];
}
)
Stringfeature=LDSUtils.Join(this.counts,"");
this.forward(this.lastUid,this.lastlid,
this.ptime
feature);
)
)
/**
*UDTFClose接口
★
.任務(wù)最后調(diào)用此接口,規(guī)格化所有數(shù)據(jù)并輸出。forward方法用于輸出結(jié)果
7
publicvoidclose()throwsUDFException
(
this.output();
)
}
5)提交程序
UDF程序開發(fā)完畢,提交到IDE中運行遠程試跑和部署。提交是通過maven插件完
成的,以Eclipse為例,提交程序步驟如下:
?配置settings.xml
御膳房依賴的mavenplugin不屬于官方插件,所以首先需要配置maven以使得
maven運彳j時可以找至ijbase-maven-plugirio
配置需要放在.m2/settings.xml中,.m2的位置艱據(jù)不同操作系統(tǒng)不一致,可查閱
maven的官方文檔確定本機.m2目錄所在位置。
一般而言,m2文件夾是隱藏文件夾,需要首先在文件夾選項中“顯示隱藏的文件、
文件夾和驅(qū)動器",然后檢索”.m2”文件夾所在位置。
以Windows7系統(tǒng)為例:
圖32文件夾和搜索選項
圖33顯示隱藏的文件、文件夾和驅(qū)動器
圖34搜索.m2文件夾
圖35settings.xml
配置的settings.xml工程內(nèi)如如下:(假設(shè)用戶系統(tǒng)中沒有settings.xml可將下面的
內(nèi)容直接新建為settings.xml:否那么請將如下配置項合并進已有的settings.xml。)
<?xmlversion="1.0"encoding=*'UTF-8',?>
<settingsxmlns=":///SETTINGS/1.0.0"
xmlns:xsi="'JI/2001/XMLSchema-instance"
xsi:schemaLocation=0:///SETTINGS/1.0.0://maven.ap
/xsd/settings-1.0.0.xsd">
<pluginGroups>
<pluginGroup>com.alibaba.base.plugins</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>base</id>
<pluginRepositories>
<pluginRepository>
<id>base-snapshots</id>
<url>://maven.sdk.de.yushanfang
/SNAPSHOT</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>base</activeProfile>
</activeProfiles>
</settings>
?base-maven-plugin
御膳房的mavenplugin有三個功能:
#檢查工程是否完整
mvnbase:check
#對工程進行打包并生成哈希文件,為提交做好準備
mvnbase:zip
#提交工程到IDE
mvnbase:submit
base-maven-plugin的幾個特有的配置項如下:
gram.type-程序類型??梢允莔apreduce或udf
base.ide.resource.url-僅mapreduce需要。御膳房實例的資源地址模式,用于生成
mrscripto://@{env}.codebase.de.yushanfang/scheduler/res?id={rid]
?提交:在Eclipse中通過base-maven-plugin提交程序:
A.在工程上點擊右鍵點擊,依次選擇RunAs->RunConfigurations...
圖36運行按鈕
B.在RunConfigurations對話框左側(cè)列表中右鍵點擊vMavenBuild->New>,
C.右側(cè)窗口中,Basedirectory選擇工程所在目錄??梢渣c擊vBroswe
Workspace...>或<BrowseFileSys
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年部編人教版八年級語文拓展閱讀計劃
- 中國加熱罩控制器行業(yè)市場占有率及投資前景預(yù)測分析報告
- 跨境電商供應(yīng)鏈金融項目可行性分析報告
- 教師暑假工作計劃(4篇)
- 中國天然薄荷清涼劑行業(yè)市場前景預(yù)測及投資價值評估分析報告
- 中國城市污水處理成套設(shè)備行業(yè)市場前景預(yù)測及投資價值評估分析報告
- 財產(chǎn)贈與協(xié)議(16篇)
- 公司承包合同范文錦集(15篇)
- 勞動合同解除(16篇)
- 夫妻自愿離婚協(xié)議(有財產(chǎn))(19篇)
- 網(wǎng)絡(luò)設(shè)備安全配置表
- GB/T 700-2006碳素結(jié)構(gòu)鋼
- GB/T 28732-2012固體生物質(zhì)燃料全硫測定方法
- GB/T 17214.1-1998工業(yè)過程測量和控制裝置工作條件第1部分:氣候條件
- 豬生殖器官(課堂PPT)
- 2023年廣東學(xué)位英語試題學(xué)位英語考試真題(含答案)
- 《旅行社經(jīng)營管理》考試復(fù)習(xí)題庫及答案
- 粵教版五年級下冊科學(xué)知識點
- 危大工程巡視檢查記錄表(深基坑)
- 《最好的未來》合唱曲譜
- GB∕T 36765-2018 汽車空調(diào)用1,1,1,2-四氟乙烷(氣霧罐型)
評論
0/150
提交評論