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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Alibaba天池實踐手冊 前言本手冊從天池選手的角度出發(fā),通過具體的案例場景引導(dǎo)用戶使用御膳房平臺進(jìn)行數(shù)據(jù)開發(fā)、數(shù)據(jù)建模以及預(yù)測。本手冊將從以下幾個步驟來描述如何使用御膳房進(jìn)行數(shù)據(jù)分析和建模:l 課題介紹l 環(huán)境和賬號l 獲取數(shù)據(jù)l 實現(xiàn)步驟由于是基于特定案例引導(dǎo),本文展示的僅僅是ODPS和算法功能的冰山一角。關(guān)于詳細(xì)的ODPS和算法功能,可以通過在線幫助手冊了解更多。請參考ODPS在線幫助手冊。 主要參考模塊:基本介紹、常用命令、SQL語法,MR語法。關(guān)于MR的使用和配置方法請參考御膳房用戶手冊。III內(nèi)容前言I內(nèi)容II1課題介紹11.1課題介紹11.1.1數(shù)據(jù)說明11.1.2輸出要求21

2、.1.3評估指標(biāo)21.2解題思路32環(huán)境、賬號42.1登錄御膳房43獲取數(shù)據(jù)63.1項目首頁63.2查看數(shù)據(jù)84實現(xiàn)步驟94.1數(shù)據(jù)開發(fā)平臺的使用(以下也稱IDE)104.1.1準(zhǔn)備工作104.1.2數(shù)據(jù)分析134.1.3特征工程194.2PAI平臺454.2.1PAI簡介454.2.2數(shù)據(jù)抽樣474.2.3建模和評估524.2.4PAI命令及模型同步624.2.5線上測試集的訓(xùn)練和預(yù)測63名詞解釋66修訂歷史67Alibaba GROUP天池實踐手冊1 課題介紹1.1 背景隨著移動電商業(yè)務(wù)的快速發(fā)展,用戶對移動端網(wǎng)絡(luò)的訪問是隨時隨地的,具有更豐富的場景數(shù)據(jù)。如何在這些巨大的信息數(shù)據(jù)中快速挖掘

3、出對我們有用的信息已成為當(dāng)前急需解決的問題。對于移動電商來說,可以運用這些有用的信息以及個性化技術(shù)的手段,對用戶進(jìn)行一系列的個性化推薦,幫助用戶從這些網(wǎng)絡(luò)過量的信息里面篩出他所需要的信息,提升移動端用戶的用戶體驗,提升個性化推薦引導(dǎo)的成交率,從而達(dá)到精準(zhǔn)營銷(Precision marketing)的目的。如下是一個簡單的個性化推薦的流程:1.2 課題介紹本課題以阿里巴巴移動電商平臺的真實用戶-商品行為數(shù)據(jù)為基礎(chǔ),同時提供移動時代特有的位置信息。您需要通過大數(shù)據(jù)和算法構(gòu)建面向移動電子商務(wù)的商品推薦模型,挖掘數(shù)據(jù)背后豐富的內(nèi)涵,為移動用戶在合適的時間、合適的地點精準(zhǔn)推薦合適的內(nèi)容。在真實的業(yè)務(wù)場

4、景下,我們往往需要對所有商品的一個子集構(gòu)建個性化推薦模型。在完成這件任務(wù)的過程中,我們不僅需要利用用戶在這個商品子集上的行為數(shù)據(jù),往往還需要利用更豐富的用戶行為數(shù)據(jù)。如下是一個真實的業(yè)務(wù)場景:給出一定量用戶在時間段11月18日12月18日內(nèi)的移動端行為數(shù)據(jù)(D),需要預(yù)測12月19日用戶對商品子集(P)的購買數(shù)據(jù)。具體的數(shù)據(jù)說明下面將會詳細(xì)介紹。1.2.1 數(shù)據(jù)說明提供的數(shù)據(jù)包含兩個部分。第一部分是用戶在商品全集上的移動端行為數(shù)據(jù)(D),表名為tianchi_mobile_recommend_train_user,包含如下字段: 字段字段說明提取說明user_id用戶標(biāo)識抽樣&字段脫敏item

5、_id商品標(biāo)識字段脫敏behavior_type用戶對商品的行為類型包括瀏覽、收藏、加購物車、購買,對應(yīng)取值分別是1、2、3、4。user_geohash用戶位置的空間標(biāo)識,可以為空由經(jīng)緯度通過保密的算法生成item_category商品分類標(biāo)識字段脫敏Time行為時間精確到小時級別D集合的記錄顯示如下:每一行代表了用戶user_id對屬于分類item_category的物品item_id在time這個時間于地點user_geohash發(fā)生了交互,交互類型是behavior_type。behavior_type包括瀏覽、收藏、加購物車、購買,對應(yīng)取值分別是1、2、3、4。給出的一共包含31天的

6、交互數(shù)據(jù),最后要預(yù)測第32天有哪些user會購買哪些item。第二個部分是商品子集(P),表名為tianchi_mobile_recommend_train_item,包含如下字段:字段字段說明提取說明item_id商品標(biāo)識抽樣&字段脫敏item_ geohash商品位置的空間標(biāo)識,可以為空由經(jīng)緯度通過保密的算法生成item_category商品分類標(biāo)識字段脫敏這部分的數(shù)據(jù),是tianchi_mobile_recommend_train_user表中出現(xiàn)的物品item_id的一個子集。官方的第32天的會發(fā)生購買的user, item中的item都是這個數(shù)據(jù)表中的item,所以我們預(yù)測的user

7、, item需要根據(jù)這個文件來過濾掉一些結(jié)果。訓(xùn)練數(shù)據(jù)包含了抽樣出來的一定量用戶在一個月時間(11.1812.18)之內(nèi)的移動端行為數(shù)據(jù)(D),評分?jǐn)?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,包含user_id和item_id兩列(均為string類型),要求去除重復(fù)。表名:tianch

8、i_mobile_recommendation_predict結(jié)果表樣例:字段字段類型示例User_idString100001Item_idString129001.2.3 評估指標(biāo)比賽采用經(jīng)典的精確度(precision)、召回率(recall)和F1值作為評估指標(biāo)。具體計算公式如下:其中PredictionSet為算法預(yù)測的購買數(shù)據(jù)集合,ReferenceSet為真實的答案購買數(shù)據(jù)集合。我們以F1值作為最終的唯一評測標(biāo)準(zhǔn)。1.3 解題思路顯然,該問題可以轉(zhuǎn)為一個二分類問題:某個用戶對某個商品是否會購買?l 分類方法:二分類最終只有兩種結(jié)果:1:購買;0:不購買l 樣本選取樣本選取有交互(

9、即:用戶對商品有行為,包括瀏覽、收藏、加購、購買)的P子集。分析在哪一天交互的樣本可能會在19號購買?16號,17號,18號?可以基于18號的購買數(shù)據(jù),分析16、17號的行為數(shù)據(jù)在18號購買的概率。l 特征分析什么樣的用戶在什么時候?qū)κ裁礃拥纳唐酚羞^什么樣的操作之后,可能會在19號購買?比如:是否曾經(jīng)買過?商品銷量?加購物車?l 模型分類、回歸。如LR、RF、GBDT等。下面我們將圍繞這個課題,描述如何在御膳房平臺完成一系列的實現(xiàn)步驟。2 環(huán)境&賬號1) 登錄御膳房首頁。點擊右上角的,輸入已經(jīng)注冊好的淘寶、阿里云賬號,如下圖所示:圖1御膳房登錄界面注:l 如果您還沒有淘寶賬號或者阿里云賬號,可

10、以在上圖點擊或完成注冊。l 如果已經(jīng)注冊,也可以使用手機(jī)號碼或郵箱登錄。2) 填寫注冊信息。首次登錄,需填寫注冊信息。單擊,頁面跳轉(zhuǎn)到用戶信息注冊頁面。請使用真實信息,完成所有必填項目(手機(jī)號、Email、聯(lián)系人為必填項,注:手機(jī)號應(yīng)與淘寶賬號綁定),閱讀并勾選“同意御膳房協(xié)議”。圖2用戶信息注冊3) 點擊后,您的賬號已經(jīng)完成了在御膳房的注冊。3 獲取數(shù)據(jù)當(dāng)用戶登錄后,即可進(jìn)入天池大賽授予的特定項目,進(jìn)行數(shù)據(jù)開發(fā)/處理/建模工作。下面我們先來看看如何獲取和查看數(shù)據(jù)。3.1 項目首頁可以從兩個入口進(jìn)入“項目”。1) 點擊御膳房 數(shù)據(jù)中心- 工作臺,用戶可以在這個界面查看自己對應(yīng)的資產(chǎn),項目名稱以

11、及角色。點擊項目名,即可進(jìn)入項目。圖3- 進(jìn)入項目入口(1)2) 點擊數(shù)據(jù)引擎- 私有區(qū),可以看到項目列表,點擊項目名稱后進(jìn)入項目。圖4 進(jìn)入項目入口(2)圖5 進(jìn)入項目入口(2)3) 進(jìn)入項目后,界面如下:圖6 進(jìn)入項目3.2 查看數(shù)據(jù)1) 進(jìn)入項目首頁后,點擊項目數(shù)據(jù)-數(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ā)工作臺中引用時,需這樣

12、:tianchi_data. tianchi_mobile_recommend_train_user。4 實現(xiàn)步驟接下來我們將介紹如何完成上述課題,主要包含以下幾個主要的步驟:1) 在數(shù)據(jù)開發(fā)平臺利用ODPS SQL進(jìn)行數(shù)據(jù)分析:l 統(tǒng)計總的用戶行為記錄l 統(tǒng)計所給數(shù)據(jù)中每天各種行為類型的記錄數(shù),了解每天會有多少瀏覽、收藏、加購、購買,觀察是否有波動。l 鎖定在P上有過交互的用戶行為。l 分析前一天加購、收藏、瀏覽對后一天購買的影響。取12/18為后一天,拿12/17的數(shù)據(jù)來驗證該設(shè)想。l 計算評估指標(biāo)。l 提交結(jié)果表。2) 特征工程:可以使用ODPS SQL進(jìn)行特征提取,也可以使用MR/UD

13、F/GRAPH進(jìn)行特征工程。這里主要介紹使用UDF進(jìn)行特征提取,MR/GRAPH的用法與之類似。l Eclipse工具的下載和安裝l 新建項目(Maven Project)l 程序開發(fā)以及提交l 利用UDF在數(shù)據(jù)開發(fā)工作臺抽取特征,詳細(xì)步驟如下: 樣本選取:(正樣本)分別以2014/12/17的購買,12/18的購買來構(gòu)建驗證集、測試集。 特征工程:利用已經(jīng)構(gòu)建的UDF函數(shù)來統(tǒng)計user-item對的點擊,收藏,加購,購買次數(shù)。 結(jié)合特征構(gòu)建驗證集和測試集,包含訓(xùn)練和測試。 檢查正負(fù)樣本比例。 轉(zhuǎn)換特征的數(shù)據(jù)格式。3) PAI平臺的使用l 數(shù)據(jù)抽樣 負(fù)樣本抽樣1/15 樣本合并l 建模和評估,

14、包括: 邏輯回歸 隨機(jī)森林 預(yù)測和評估l PAI命令的執(zhí)行以及模型同步l 線上測試集的訓(xùn)練和預(yù)測4.1 數(shù)據(jù)開發(fā)平臺的使用(以下也稱IDE)用戶在數(shù)據(jù)開發(fā)工作臺中以編寫和運行基于ODPS 的SQL、MapReduce、UDF和Graph。其中,SQL、MapReduc和UDF的編寫語法參考ODPS文檔,請點擊這里。MapReduc、UDF和Graph的配置請參考這里。4.1.1 準(zhǔn)備工作1) 進(jìn)入項目首頁: 圖8 項目首頁2) 點擊“數(shù)據(jù)開發(fā)”,即可進(jìn)入數(shù)據(jù)開發(fā)工作臺:圖9 數(shù)據(jù)開發(fā)工作臺為了方便管理代碼,可以新建一個文件夾,把自己的代碼都放在這個文件夾中(天池歷屆比賽中,通常都是一個隊伍所有

15、成員共享一個project)。3) 新建文件夾。右鍵點擊“工作流”并點擊,新增一個工作文件夾,輸入文件夾名稱,選擇文件夾位置,提交即可,如:圖10 新建文件夾4) 新增工作流節(jié)點。在數(shù)據(jù)開發(fā)工作臺左側(cè)導(dǎo)航選擇“數(shù)據(jù)開發(fā)”。圖11 數(shù)據(jù)開發(fā)圖標(biāo)點擊“+”圖標(biāo),選擇“工作流節(jié)點”。圖12 “+”圖標(biāo)右鍵點擊文件夾,比如“nj_work”,并點擊,在頁面配置一個ODPS SQL節(jié)點如下:圖13 新增工作流節(jié)點點擊,此時在新的頁面上就可以編寫ODPS SQL代碼了?,F(xiàn)在我們可以查一下表tianchi_mobile_recommend_train_user的表結(jié)構(gòu),如下:圖14 運行ODPS命令點擊運行

16、代碼(或按F8鍵)。注意:對于選手而言,所有的操作只需要在開發(fā)環(huán)境運行,也就是說,不需要提交數(shù)據(jù)到生產(chǎn)環(huán)境,也不需要進(jì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)境。具體描述請參考御膳房最佳實踐之?dāng)?shù)據(jù)同步章節(jié)(4.1.2 數(shù)據(jù)分析下面我們根據(jù)上面的課題在IDE上先進(jìn)行相關(guān)的數(shù)據(jù)分析。給出一定量用戶在11.1812.18之內(nèi)的移動端行為數(shù)據(jù)(D),需要預(yù)測12.19對商品子集(P)的購買數(shù)據(jù)。行為分為四種:1(瀏覽),2(收藏),3(加購物車),4(購買)。首先,由于賽題數(shù)據(jù)來源于

17、其他project(項目空間),為方便起見及后續(xù)在算法平臺(PAI)中使用,可以考慮將項目表拷貝到本隊伍所在項目空間。SQL如下:Create table tianchi_mobile_recommend_train_user asselect * from tianchi_data. tianchi_mobile_recommend_train_user; Create table tianchi_mobile_recommend_train_item asselect * from tianchi_data. tianchi_mobile_recommend_train_item;下面我們

18、就可以在IDE利用ODPS SQL進(jìn)行相關(guān)的數(shù)據(jù)統(tǒng)計:l 統(tǒng)計D集合的數(shù)量:select count (*) from tianchi_mobile_recommend_train_user;-包含了58億用戶的行為記錄。l 統(tǒng)計針對P子集的用戶行為數(shù)據(jù) :createtablet_mj_p_userasselectt.*, b.item_geohash fromtianchi_mobile_recommend_train_usertjointianchi_mobile_recommend_train_itembonb.item_id=t.item_idandb.item_category=t

19、.item_category;select count(1) from t_mj_p_user; -10.7億l 統(tǒng)計所給數(shù)據(jù)中每天各種行為類型的記錄數(shù),了解每天會有多少瀏覽、收藏、加購、購買,觀察是否有波動:select substr(time,1, 10) as day ,behavior_type ,count(1) cntfrom tianchi_mobile_recommend_train_usergroup by substr(time,1, 10) ,behavior_type; 從用戶的購買行為動機(jī)和流程來看,人們通常在購買時會經(jīng)歷瀏覽收藏/加到購物車下單付款這一系列動作,有的

20、可能會搜索后就直接購買,有的可能會操作得多一點,反復(fù)挑選和比較。如果說用戶都已經(jīng)把寶貝加到購物車了,那么購買的概率會不會更高?最近加到購物車的是不是應(yīng)該更有可能被購買?基于這個設(shè)想,下面我們示范下如何在數(shù)據(jù)平臺上進(jìn)行這個分析,并完成結(jié)果提交。這是一個通過簡單規(guī)則來判斷購買從而提交結(jié)果的示例,較為簡單粗暴,但可以讓我們先熟悉下從拿到課題到提交結(jié)果的整個流程,以及初嘗結(jié)果驗證設(shè)想。1) 由于所給數(shù)據(jù)tianchi_mobile_recommend_train_user為用戶在所有商品類目上的行為,而要預(yù)測的是在商品子集P上的購買,故先鎖定在P上有過交互的用戶行為:createtablet_mj_p

21、_userasselectt.*, b.item_geohash fromtianchi_mobile_recommend_train_usertjointianchi_mobile_recommend_train_itembonb.item_id=t.item_idandb.item_category=t.item_category;select count(1) from t_mj_p_user;- 1074139328 (用戶對P子集商品的交互記錄數(shù))select count(1) from t_mj_p_user where behavior_type=4;-9309353(其中對P子

22、集商品有購買的記錄數(shù))select count(1) from (select user_id ,item_id ,count(1) cnt from t_mj_p_user group by user_id ,item_id)t; -202430141 user,item對2) 分析前一天加購、收藏、瀏覽對后一天購買的影響。取12/18為后一天,拿12/17的數(shù)據(jù)來驗證該設(shè)想。create table t_mj_u_i_1day as select user_id ,item_id ,case when substr(time,1, 10)=2014-12-17 and behavior_t

23、ype=1 then 1 else 0 end as is_1day_view ,case when substr(time,1, 10)=2014-12-17 and behavior_type=2 then 1 else 0 end as is_1day_fav ,case when substr(time,1, 10)=2014-12-17 and behavior_type=3 then 1 else 0 end as is_1day_cart ,case when substr(time,1, 10)=2014-12-17 and behavior_type=4 then 1 els

24、e 0 end as is_1day_buy ,case when substr(time,1, 10)=2014-12-18 and behavior_type=4 then 1 else 0 end as is_buy from t_mj_p_user; 計算評估指標(biāo):select precision ,recall ,2*precision*recall/(precision+recall) as f1from (select hit_cnt/p_cnt as precision ,hit_cnt/r_cnt as recall from (select sum(if(a.user_id

25、 is not null and a.item_id is not null and b.user_id is not null and b.item_id is not null, 1, 0) as hit_cnt -命中 ,if(sum(a.r_cnt) is null, 0, sum(a.r_cnt) as r_cnt -實際 ,if(sum(b.p_cnt) is null, 0, sum(b.p_cnt) as p_cnt -預(yù)測 from ( select user_id,item_id, count(1) as r_cnt from t_mj_u_i_1day where is_

26、buy=1 and user_id is not null and item_id is not null group by user_id, item_id ) a full outer join ( select user_id,item_id, count(1) as p_cnt from t_mj_u_i_1day where is_1day_cart=1 and user_id is not null and item_id is not null group by user_id, item_id ) b on a.user_id = b.user_id and a.item_id

27、 = b.item_id )t )tb;返回如下結(jié)果,可以看到F1=2.99%,召回率高于準(zhǔn)確率,均有較大提升空間:圖15 返回結(jié)果3) 提交結(jié)果:以比賽要求的12/19為預(yù)測日期,將用戶在12/18對商品子集P加購最多的商品作為預(yù)測結(jié)果tianchi_mobile_recommendation_predict,生成該表即完成了提交,注:大賽進(jìn)行的時候,天池的評測系統(tǒng)會自動去掃描各project中指定命名的表(本例中即:tianchi_mobile_recommendation_predict)并評測。drop table if exists tianchi_mobile_recommenda

28、tion_predict;create table tianchi_mobile_recommendation_predict as select user_id ,item_id from ( select user_id ,item_id ,row_number() over(partition by user_id order by num desc) as rank from ( select a.user_id ,a.item_id ,a.num from ( select user_id ,item_id ,count(1) as num from tianchi_mobile_r

29、ecommend_train_user where substr(time, 1, 10)=2014-12-18 and behavior_type=3 group by user_id ,item_id ) a join ( select distinct item_id from tianchi_mobile_recommend_train_item ) b on a.item_id = b.item_id where b.item_id is not null ) c ) dwhere rank=1;count tianchi_mobile_recommendation_predict;

30、-166068(與上述數(shù)據(jù)分析時所統(tǒng)計的每日購買數(shù)據(jù)量相仿)基于這個提交的結(jié)果,可以拿到這樣一個分?jǐn)?shù):準(zhǔn)確率=1%, 召回率=0.9%,F(xiàn)1=0.96%。說明:上述SQL語法涉及到的主要知識點包括: 創(chuàng)建表/刪除表 聚合函數(shù)count 字符串函數(shù)substr Join語法 row_number函數(shù) case when/if條件函數(shù)關(guān)于SQL的更多語法,請參考ODPS用戶手冊4.1.3 特征工程經(jīng)過一番數(shù)據(jù)探查和分析,可大致確定深入的解題方案。假設(shè)考慮采取“按用戶-商品對抽取特征,再進(jìn)行分類”這樣一種方案,那么接下來就要抽取特征。假設(shè)我們的特征使用近1天,3天,7天,10天的用戶行為數(shù)量(點擊數(shù)

31、,瀏覽數(shù)),我們可以直接使用sql來抽取特征,或者使用MapReduce(簡稱MR),再或者使用UDF(user-defined function),這些都可以在數(shù)據(jù)開發(fā)下添加相應(yīng)的節(jié)點來完成。以下演示在平臺上如何配置和使用MR/UDF/Graph實現(xiàn)特征抽取,以UDF為例詳細(xì)操作,MR同理,只是一兩處有些許差別,相應(yīng)的地方也會特別注明。 工具下載請前往/m2e/ 下載Eclipse 插件。請前往/ 下載Maven 插件,建議下載3.2.5 版本。下載完畢并解壓安裝后,打開Eclipse 插件,

32、會看到以下界面:圖16 Eclipse主頁面 新建項目MR&UDF開發(fā)工具全部基于Maven開發(fā),因此使用此工具前應(yīng)該對maven的概念及基本使用有一定了解。使用IDE來開發(fā)MR&UDF,還要了解如何在IDE中使用相關(guān)maven插件。MR&UDF開發(fā)工具通過maven archetype機(jī)制新建程序項目,御膳房提供base-mapreduce-archetype、base-udf-archetype和base-graph-archetype三個archetypes,通過遠(yuǎn)程repository可直接使用。l 添加遠(yuǎn)程repository注:請確保機(jī)器是上裝有maven,并且Ecl

33、ipse中已安裝M2Eclipse插件。1) 如果您使用的是MAC 系統(tǒng),請在Eclipse 中依次點擊 Maven -Arthetypes ,在打開的對話框中點擊 按鈕;如果您使用的是WINDOWS 或其他系統(tǒng),請在Eclipse 中依次點擊Preferences - Maven - Arthetypes ,在打開的對話框中點擊 按鈕。圖17添加 Maven Arthetypes2) 在打開的對話框中, Catalog File 填入 Description 填入 Base Archetypes,然后一路點擊 就完成了遠(yuǎn)程repository 添加。圖18 設(shè)定遠(yuǎn)程目錄l 新建項目1) 如同

34、新建一般maven項目一樣,在Eclipse中依次點擊 New - Project.,在打開的對話框中選擇Maven - Maven Project:圖19 新建Maven 項目2) 一路點擊 ,在 Select an Archetypes 界面, Catalog 選擇 Base Archetypes ,并選中 Include snapshot archetypes 復(fù)選框,此時可以看到列表中出現(xiàn)base-graph-archetype、base-mapreduce-archetype和base-udf-archetype三個archetypes,選擇需要創(chuàng)建的程序類型,點擊。 圖20 新建b

35、ase-udf-archetype3) 以base-udf-archetype為例,點擊 后,會進(jìn)入常規(guī)的maven項目初始化配置界面。注意Properties列表中會出現(xiàn)幾個御膳房特有的配置項,分別是: baseId - 用戶在御膳房上的用戶標(biāo)識 projectId - 用戶要創(chuàng)建程序到哪個御膳房項目ID token 項目證書 idePath - 程序?qū)⒁蟼鞯絀DE的哪個工作目錄/文件夾下,需要文件夾已經(jīng)在IDE中創(chuàng)建好,例如“工作流/寧晶”。獲取這些配置項的操作步驟如下:A. 點擊,如下圖:圖21 獲取我的賬號B. 點擊證書管理,看到項目ID(對應(yīng)到 projectId)、用戶標(biāo)識(對應(yīng)

36、到baseId)、項目證書(對應(yīng)到token)三個信息:圖22 證書管理C. 配置示例如下圖:(其中,Group ID和Artifact Id, idePath, functionName為自定義,注:命名中請勿使用-字符,否則會報錯;另外3個ID項按照上述方式獲取并填入)。若為UDF, 相應(yīng)的配置會保存于配置文件src/main/resources/META-INF/base.udf.xml中.圖23 設(shè)定archetype參數(shù)注:這里將idePath自定義配置成:工作流/寧晶(再次強(qiáng)調(diào)下,這個文件需要在IDE中先建好,否則后續(xù)會報錯),那么當(dāng)Maven項目開發(fā)完,在eclipse直接提交后

37、,提交的節(jié)點和對應(yīng)源代碼就會自動在IDE 的該目錄下創(chuàng)建。D. 填寫完成后,點擊 就會完成項目創(chuàng)建,隨后即可在Eclipse的項目管理器中看到新建的項目了。圖24 配置好的項目 程序開發(fā)及提交.1 項目結(jié)構(gòu)通過archetypes新創(chuàng)建的程序具有完整的maven project骨架(如初始化好的pom文件等)、腳手架代碼(用戶可直接在其中實現(xiàn)自己的業(yè)務(wù))和示例代碼;其中mapreduce程序還帶有本地運行環(huán)境和mock數(shù)據(jù),用于通過local模式運行mapreduce程序,以便本地調(diào)試。下面我們將介紹UDF程序開發(fā)步驟。.2 UDF程序開發(fā)步驟1) 項

38、目結(jié)構(gòu)一個新創(chuàng)建的udf程序項目結(jié)構(gòu)如下:(與mapreduce程序類似,但是udf程序目前不支持本地調(diào)試) lib vider-1.38-jdk15.jar commons-codec-1.9.jar commons-io-2.4.jar commons-lang-2.4.jar commons-logging-1.1.1.jar gson-2.2.4.jar jackson-core-asl-1.9.13.jar jackson-mapper-asl-1.9.13.jar javacsv-2.0.jar odps-commons-internal-0.13.

39、2.jar odps-sdk-commons-0.13.2.jar odps-sdk-core-0.13.2.jar odps-sdk-udf-0.13.2.jar odps-sdk-udf-internal-0.13.2.jar pom.xml src main java my group myudf MyUDAF.java MyUDF.java MyUDTF.java examples GcdUDF.java NormalizeUDTF.java VarianceUDAF.java resources META-INF base.udf.xml perties

40、test java my group myudf resources其中,用戶的程序?qū)懺趕rc/main/java 下。2) 證書配置證書文件位于 src/main/resources/perties ,其中存儲Base ID、Project ID和Token,是完成鑒權(quán)及身份認(rèn)證的重要文件。圖25 證書配置頁面3) 配置文件不論是mapreduce還是udf程序,都有一個主配置文件。這個配置文件是整個項目的核心,許多重要信息都需要在這里配置。UDF程序配置文件位于 src/main/resources/META-INF/base.udf.xml,形如下圖。其中:b

41、aseId、projectId來源于maven項目初始化配置; functionName必填,為最終注冊的UDF名稱,即需要在SQL中調(diào)用的函數(shù)名;className - 必填,為實現(xiàn)UDF的class全名。圖26 UDF程序配置文件4) 程序開發(fā)在src/main/java中新建class,右擊src/main/java并點擊 Package:圖27 新建package在彈出的New Java Package對話框中填入基本信息,如:圖28 新建Java package點擊之后,將會在src/main/java節(jié)點下新增”mj.udf”這個節(jié)點,如:圖29 新增的package右擊mj.ud

42、f這個package,并點擊 Class。填入Name(LBSUtils)后即可打開程序編輯框。 圖30 新建Class在編輯框編寫程序代碼:package taijixiong.udf;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class LBSUtils public static int DateSubtract(String d1, String d2) throws ParseExceptionSimpleDateFormat fmt =

43、 new SimpleDateFormat(yyyy-MM-dd);Date date1 = fmt.parse(d1);Date date2 = fmt.parse(d2);return (int) (date1.getTime()-date2.getTime()/(1000L*60*60*24);public static String Join(int arr, String sep)if ( arr.length=0)return ;StringBuffer sb = new StringBuffer();sb.append(arr0);for(int i=1;istring,stri

44、ng,string,string)/ TODO define input and output types, e.g., string,string-string,bigint.public class ExtractPairCount extends UDTF public String lastUid = ;public String lastIid = ;public int intervals = 1,3,7,100;public int currentIndex = 0;public int counts = new int4*4;public String ptime = ;Overridepublic void setup(ExecutionContext ctx) throws UDFException /* * UDTF Process接口 * * 每條記錄都會調(diào)用此接口。 */ public void process(Object args) throws UDFException String uid = (String) args0; String iid = (String) args1;

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論