Spark開(kāi)發(fā)電商日志分析用戶(hù)行為聚合功能練習(xí)

項(xiàng)目介紹

項(xiàng)目介紹

電商網(wǎng)站的各種用戶(hù)行為進(jìn)行分析

訪(fǎng)問(wèn)首頁(yè) → 點(diǎn)擊商品 → 添加購(gòu)物車(chē) → 結(jié)算
訪(fǎng)問(wèn)首頁(yè) → 輸入關(guān)鍵詞 → 點(diǎn)擊商品列表 → 點(diǎn)擊商品→ 關(guān)閉網(wǎng)頁(yè)
訪(fǎng)問(wèn)詳情頁(yè) → 查看推薦商品 → 點(diǎn)擊商品列表 → 點(diǎn)擊商品→ 購(gòu)買(mǎi)
廣告頁(yè) → 商品頁(yè) → 購(gòu)物車(chē)

項(xiàng)目目的

為產(chǎn)品部門(mén)稿湿、運(yùn)營(yíng)部門(mén)稚铣、決策部門(mén)

提供決策數(shù)據(jù)支持
提供優(yōu)化指導(dǎo)思路

企業(yè)開(kāi)發(fā)流程

需求分析 → 方案設(shè)計(jì) → 數(shù)據(jù)設(shè)計(jì) → 編碼實(shí)現(xiàn) → 功能測(cè)試 → 解決技術(shù)問(wèn)題(數(shù)據(jù)傾斜等)→ 性能調(diào)優(yōu)

用戶(hù)需求

可以根據(jù)使用者指定的某些條件,篩選出指定的一些用戶(hù)(有特定年齡隘竭、職業(yè)可训、城市)绘梦;
例如:
選擇年齡: 10 到 50周歲
選擇時(shí)間: 開(kāi)始時(shí)間2017-08-20 結(jié)束時(shí)間2017-08-20
選擇性別:女性
查詢(xún)符合條件的所有用戶(hù)

名詞解釋

用戶(hù)訪(fǎng)問(wèn)session

用戶(hù)session指的是:
從用戶(hù)第一次進(jìn)入頁(yè)面開(kāi)始嘀掸,到用戶(hù)關(guān)閉瀏覽器(長(zhǎng)時(shí)間沒(méi)有操作)結(jié)束。
在這段時(shí)間范圍內(nèi)实幕,所有的操作(可能做了幾十次吝镣、甚至上百次操作),都稱(chēng)為是一個(gè)用戶(hù)行為昆庇。

在一個(gè)Session過(guò)程中SessionId是不變的末贾,由多個(gè)id相同的Session組成用戶(hù)的一條操作行為

一個(gè)用戶(hù)一天可以有多個(gè)Session

數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu) user_visit_action(Hive表)

date:日期,代表這個(gè)用戶(hù)點(diǎn)擊行為是在哪一天發(fā)生的
user_id:代表這個(gè)點(diǎn)擊行為是哪一個(gè)用戶(hù)執(zhí)行的
session_id :唯一標(biāo)識(shí)了某個(gè)用戶(hù)的一個(gè)訪(fǎng)問(wèn)session
page_id :點(diǎn)擊了某些商品/品類(lèi)整吆,也可能是搜索了某個(gè)關(guān)鍵詞拱撵,然后進(jìn)入了某個(gè)頁(yè)面,頁(yè)面的id
action_time :這個(gè)點(diǎn)擊行為發(fā)生的時(shí)間點(diǎn)
search_keyword :如果用戶(hù)執(zhí)行的是一個(gè)搜索行為表蝙,比如說(shuō)在網(wǎng)站/app中拴测,搜索了某個(gè)關(guān)鍵詞,然后會(huì)跳轉(zhuǎn)到商品列表頁(yè)面府蛇;搜索的關(guān)鍵詞
click_category_id :可能是在網(wǎng)站首頁(yè)昼扛,點(diǎn)擊了某個(gè)品類(lèi)(美食、電子設(shè)備欲诺、電腦)
click_product_id :可能是在網(wǎng)站首頁(yè),或者是在商品列表頁(yè)渺鹦,點(diǎn)擊了某個(gè)商品(比如呷哺呷哺火鍋XX路店3人套餐扰法、iphone 6s)
order_category_ids :代表了可能將某些商品加入了購(gòu)物車(chē),然后一次性對(duì)購(gòu)物車(chē)中的商品下了一個(gè)訂單毅厚,這就代表了某次下單的行為中塞颁,有哪些
商品品類(lèi),可能有6個(gè)商品,但是就對(duì)應(yīng)了2個(gè)品類(lèi)祠锣,比如有3根火腿腸(食品品類(lèi))酷窥,3個(gè)電池(日用品品類(lèi))
order_product_ids :某次下單,具體對(duì)哪些商品下的訂單
pay_category_ids :代表的是伴网,對(duì)某個(gè)訂單蓬推,或者某幾個(gè)訂單,進(jìn)行了一次支付的行為澡腾,對(duì)應(yīng)了哪些品類(lèi)
pay_product_ids:代表的沸伏,支付行為下,對(duì)應(yīng)的哪些具體的商品

數(shù)據(jù)結(jié)構(gòu) user_info(Hive表)

user_id:其實(shí)就是每一個(gè)用戶(hù)的唯一標(biāo)識(shí)动分,通常是自增長(zhǎng)的Long類(lèi)型毅糟,BigInt類(lèi)型
username:是每個(gè)用戶(hù)的登錄名
name:每個(gè)用戶(hù)自己的昵稱(chēng)、或者是真實(shí)姓名
age:用戶(hù)的年齡
professional:用戶(hù)的職業(yè)
city:用戶(hù)所在的城市

數(shù)據(jù)結(jié)構(gòu) task(MySQL表)

task_id:表的主鍵
task_name:任務(wù)名稱(chēng)
create_time:創(chuàng)建時(shí)間
start_time:開(kāi)始運(yùn)行的時(shí)間
finish_time:結(jié)束運(yùn)行的時(shí)間
task_type:任務(wù)類(lèi)型澜公,就是說(shuō)姆另,在一套大數(shù)據(jù)平臺(tái)中,肯定會(huì)有各種不同類(lèi)型的統(tǒng)計(jì)分析任務(wù)坟乾,比如說(shuō)用戶(hù)訪(fǎng)問(wèn)session分析任務(wù)迹辐,頁(yè)面單跳轉(zhuǎn)化率統(tǒng)計(jì)任務(wù);所以這個(gè)字段就標(biāo)識(shí)了每個(gè)任務(wù)的類(lèi)型
task_status:任務(wù)狀態(tài)糊渊,任務(wù)對(duì)應(yīng)的就是一次Spark作業(yè)的運(yùn)行右核,這里就標(biāo)識(shí)了,Spark作業(yè)是新建渺绒,還沒(méi)運(yùn)行贺喝,還是正在運(yùn)行,還是已經(jīng)運(yùn)行完畢
task_param:最最重要宗兼,用來(lái)使用JSON的格式躏鱼,來(lái)封裝用戶(hù)提交的任務(wù)對(duì)應(yīng)的特殊的篩選參數(shù)

數(shù)據(jù)Session聚合

將多條id相同的記錄聚合成一條記錄:意思是說(shuō)將多個(gè)Action組成一個(gè)動(dòng)作序列
User_visit_action數(shù)據(jù)量龐大
1000萬(wàn)日活用戶(hù),就能產(chǎn)生5到10億條用戶(hù)行為數(shù)據(jù)
如果我們做一次Session的聚合殷绍,數(shù)據(jù)量將大大下降

我們將單個(gè)操作染苛,比如 點(diǎn)擊、搜索等主到,組成一個(gè)行為序列茶行,用時(shí)間順序排序,表明用戶(hù)都做了哪些操作登钥,前后操作順序是什么樣畔师?

下面開(kāi)始搭建開(kāi)發(fā)環(huán)境

項(xiàng)目地址

https://github.com/xy83918/ECLA

開(kāi)發(fā)IDE

https://www.jetbrains.com/idea/download/#section=windows

jdk 下載1.7

http://www.oracle.com/technetwork/java/javase/archive-139210.html

mysql

https://www.mysql.com/downloads/

MySQL windows版
http://sw.bos.baidu.com/sw-search-sp/software/d59738042c504/mysql-5.7.17.msi

mysql腳本


CREATE DATABASE spark_project
USE spark_project
/*
SQLyog Ultimate v12.09 (64 bit)
MySQL - 5.7.17-log 
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;

create table `task` (
    `task_id` int (11),
    `task_name` varchar (765),
    `create_time` varchar (765),
    `start_time` varchar (765),
    `finish_time` varchar (765),
    `task_type` varchar (765),
    `task_status` varchar (765),
    `task_param` text 
); 
insert into `task` (`task_id`, `task_name`, `create_time`, `start_time`, `finish_time`, `task_type`, `task_status`, `task_param`) values('1','測(cè)試任務(wù)',NULL,NULL,NULL,NULL,NULL,'{\"startAge\":[\"10\"],\"endAge\":[\"50\"],\"startDate\":[\"2017-07-26\"],\"endDate\":[\"2017-07-26\"],\"sex\":[\"male\"]}');

注意Task表中最后一個(gè)列task_param中,Json的StartDate和EndDate需要設(shè)置成今天牧牢,因?yàn)閙ock數(shù)據(jù)的時(shí)候看锉,只有今天的數(shù)據(jù)

加載main方法 第 60多行

System.out.println (sessionid2actionRDD.count ());
        for (Tuple2<String,Row> tuple: sessionid2actionRDD.take ( 10 )){

            System.out.println (tuple._2 ());
        }

程序的主入口

SessionAnalysis

main方法

main方法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末姿锭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子伯铣,更是在濱河造成了極大的恐慌呻此,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腔寡,死亡現(xiàn)場(chǎng)離奇詭異焚鲜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蹬蚁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)恃泪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人犀斋,你說(shuō)我怎么就攤上這事贝乎。” “怎么了叽粹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵览效,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我虫几,道長(zhǎng)锤灿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任辆脸,我火速辦了婚禮但校,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啡氢。我一直安慰自己状囱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布倘是。 她就那樣靜靜地躺著亭枷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搀崭。 梳的紋絲不亂的頭發(fā)上叨粘,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音瘤睹,去河邊找鬼升敲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛轰传,可吹牛的內(nèi)容都是我干的驴党。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绸吸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鼻弧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起锦茁,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤攘轩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后码俩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體度帮,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年稿存,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了笨篷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瓣履,死狀恐怖率翅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情袖迎,我是刑警寧澤冕臭,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站燕锥,受9級(jí)特大地震影響辜贵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜归形,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一托慨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暇榴,春花似錦厚棵、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至歉井,卻和暖如春柿祈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哩至。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工躏嚎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人菩貌。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓卢佣,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親箭阶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虚茶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容