天池實踐手冊_第1頁
天池實踐手冊_第2頁
天池實踐手冊_第3頁
天池實踐手冊_第4頁
天池實踐手冊_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論