Hive SQL練習之影評案例

一搅幅、思維導圖

本項目思維導圖.PNG

二溯职、準備工作

2.1使用工具

由于hive安裝復雜,本項目使用金融數據分析案例第四篇《Hive初步學習》提供的【數據蛙環(huán)境(linux服務地址:106.13.128.83、用戶名:froghd、密碼:暫不透露)】進行操作琐鲁。
操作工具主要為Xshell.6.0.0121.7z【優(yōu)點:更便于使用linux服務】。

安裝Xshell過程中如果不成功人灼,可能需要先安裝如圖工具.PNG

2.2數據下載

數據下載鏈接
下載完成后围段,我放在桌面。

2.3數據描述

三份數據如下(均為 .dat 文件):
1挡毅、users.dat
數據格式為: 2::M::56::16::70072蒜撮,共有6040條數據
對應字段為:UserID BigInt, Gender String, Age Int, Occupation String, Zipcode String
對應字段中文解釋:用戶id,性別跪呈,年齡,職業(yè)取逾,郵政編碼
2耗绿、movies.dat
數據格式為: 2::Jumanji (1995)::Adventure|Children's|Fantasy,共有3883條數據
對應字段為:MovieID BigInt, Title String, Genres String
對應字段中文解釋:電影ID砾隅,電影名字误阻,電影類型
3、ratings.dat
數據格式為: 1::1193::5::978300760晴埂,共有1000209條數據
對應字段為:UserID BigInt, MovieID BigInt, Rating Double, Timestamped String
對應字段中文解釋:用戶ID,電影ID,評分竭缝,評分時間戳

2.4數據上傳至linux服務器

相關配置完成后希太,在該界面輸入賬號和密碼.png
cd /home/mike  -- 然后輸入左側代碼,回車后顯示如下圖
顯示界面.png
sudo rz  
-- 如果輸入rz報錯琅锻,說明你沒有權限卦停;此時需要通過輸入sudo rz來
-- sudo允許一個已授權用戶以超級用戶角色來訪問
輸入密碼向胡,隱藏輸入(你看不出來),再回車.PNG

選擇需要上傳的數據(.dat文件)惊完,我之前放在桌面僵芹,點選上傳.PNG

輸入 ll 回車后,可以看出3個 .dat 文件上傳成功.png

輸入hive小槐,直接進入hive模式.png

三拇派、十題操作

十題操作.PNG

1、正確建表凿跳,導入數據(三張表件豌,三份數據),并驗證是否正確

創(chuàng)建一個數據庫wt拄显,在wt數據庫中創(chuàng)建3張表苟径,t_user,t_movie躬审,t_rating

t_user : userid bigint,sex string,age int,occupation string,zipcode string
t_movie : movieid bigint,moviename string,movietype string
t_rating : userid bigint,movieid bigint,rate double,times string

原始數據是以::進行切分的棘街,所以需要使用能解析多字節(jié)分隔符的Serde即可
使用RegexSerde
需要兩個參數:
input.regex = "(.)::(.)::(.*)"
output.format.string = "%1s %2s %3$s"

-- 創(chuàng)建數據庫
drop database if exists wt;
create database if not exists wt;
use wt;  --  此步不可少!
-- 創(chuàng)建表t_user
create table t_user(
userid bigint,
sex string,
age int,
occupation string,
zipcode string) 
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe' 
with serdeproperties('input.regex'='(.*)::(.*)::(.*)::(.*)::(.*)','output.format.string'='%1$s %2$s %3$s %4$s %5$s')
stored as textfile;
-- 創(chuàng)建表t_movie
create table t_movie(
movieid bigint,
moviename string,
movietype string) 
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe' 
with serdeproperties('input.regex'='(.*)::(.*)::(.*)','output.format.string'='%1$s %2$s %3$s')
stored as textfile;
-- 創(chuàng)建表t_rating
create table t_rating(
userid bigint,
movieid bigint,
rate double,
times string) 
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe' 
with serdeproperties('input.regex'='(.*)::(.*)::(.*)::(.*)','output.format.string'='%1$s %2$s %3$s %4$s')
stored as textfile;
--  導入數據
load data local inpath "/home/mike/users.dat" into table t_user;
--  驗證
select t.* from t_user t;
1.PNG

2承边、求被評分次數最多的10部電影遭殉,并給出評分次數(電影名,評分次數)

select b.moviename as moviename,count(a.rate) as total from t_rating a
join t_movie b
on a.movieid=b.movieid
group by moviename --【此處是注釋】或者b.moviename
order by total desc
limit 10;
2.png

3博助、分別求男性险污,女性當中評分最高的10部電影(性別,電影名富岳,影評分)

select a.sex as sex,c.moviename as moviename,avg(b.rate) as avgrate,count(c.moviename) as total from t_user a
join t_rating b on a.userid=b.userid
join t_movie c on c.movieid=b.movieid
group by sex,moviename
having sex="F"  -- having sex="M"即為男性
order by avgrate desc
limit 100;
3.png

4蛔糯、求movieid = 2116這部電影各年齡段(因為年齡就只有7個,就按這個7個分就好了)的平均影評(年齡段窖式,影評分)

select a.age as age,avg(b.rate) as avgrate
from t_user a
join t_rating b on a.userid=b.userid
where b.movieid=2116
group by age
order by avgrate desc;
4.png

5蚁飒、求最喜歡看電影(影評次數最多)的那位女性評最高分的10部電影的平均影評分(觀影者,電影名萝喘,影評分)

select a.userid ,count(a.rate) as ratecount 
from t_rating a
join t_user b on a.userid=b.userid
where b.sex="F"
group by a.userid
order by ratecount desc
limit 5;
5-1.PNG
create table answer_B as 
select a.movieid as movieid, a.rate as rate  
from t_rating a 
where a.userid=1150 
order by rate desc;
5-2.PNG
select * from answer_B limit 10;
5-3.PNG
select b.moviename as moviename,avg(c.rate) as avgrate
from answer_B a
join t_movie b on a.movieid=b.movieid
join t_rating c on b.movieid=c.movieid
group by moviename;
5-4.PNG

6淮逻、求好片(評分>=4.0)最多的那個年份的最好看的10部電影

create table answer6_A as 
select a.movieid as movieid,a.moviename as moviename,substr(a.moviename,-5,4) as year,avg(b.rate) as avgrate 
from t_movie a
join t_rating b on a.movieid=b.movieid
group by a.movieid,a.moviename;
select * from answer6_A limit 10;
6-1.PNG
select year,count(avgrate>=4) as count
from answer6_A
group by year
order by count desc
limit 5;
6-2.PNG
select movieid,moviename,avgrate
from answer6_A
where year=1998
order by avgrate desc
limit 10;
6-3.PNG

7、求1997年上映的電影中阁簸,評分最高的10部Comedy類電影

create table answer7_A as 
select a.movieid as id,a.moviename as name,a.year as year,a.avgrate as avgrate,b.movietype as type
from answer6_A a
join t_movie b on a.movieid=b.movieid;
select * from answer7_A limit 10;
7-1.PNG
select id,name,avgrate,type
from answer7_A
where year=1997 and instr(lcase(type),"comedy")>0
order by avgrate desc
limit 10;
7-2.PNG

8爬早、該影評庫中各種類型電影中評價最高的5部電影(類型,電影名启妹,平均影評分)

create table answer8_A as 
select a.id as id ,a.name as name,a.year as year,a.avgrate as avgrate,tv.typesplit as typesplit
from answer7_A a
lateral view explode(split(type,"\\|")) tv as typesplit;
8-1.PNG
create table answer8_B as 
select id,year,lcase(typesplit) as type,name,avgrate,row_number() over(partition by lcase(typesplit) order by avgrate desc) as num
from answer8_A;
select * from answer8_B
limit 10;
8-2.PNG
select type,name,avgrate from answer8_B
where num<=5;
8-3.PNG

9筛严、各年評分最高的電影類型(年份,類型翅溺,影評分)

create table answer9_A as 
select year,lcase(typesplit) as type,avg(avgrate) as rate
from answer8_A
group by year,lcase(typesplit) ;
select * from answer9_A limit 10;
9-1.PNG
create table answer9_B as 
select year,type,rate,row_number() over (partition by year order by rate) as num
from answer9_A; 
select * from answer9_B where num=1;
9-2.PNG

10脑漫、每個地區(qū)最高評分的電影名髓抑,把結果存入HDFS(地區(qū),電影名优幸,影評分)

create table answer10_A as
select a.zipcode as city,c.moviename as name, avg(b.rate) as avgrate
from t_user a 
join t_rating b on a.userid=b.userid 
join t_movie c on b.movieid=c.movieid 
group by a.zipcode, c.moviename;
create table answer10_B as
select city,name,avgrate,row_number() over(partition by city order by avgrate desc) as num
from answer10_A;
select * from answer10_B limit 10;
10-1.PNG
insert overwrite directory "/wt/answer10" 
row format delimited fields terminated by "\t" 
select * from answer10_B where num=1;
10-2.PNG

參考資料:
(1)Xshell 怎么上傳文件到Linux
(2)Hive學習之路 (十二)Hive SQL練習之影評案例
(3)金融數據分析案例第四篇《Hive初步學習》

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末吨拍,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子网杆,更是在濱河造成了極大的恐慌羹饰,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碳却,死亡現場離奇詭異队秩,居然都是意外死亡,警方通過查閱死者的電腦和手機昼浦,發(fā)現死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門馍资,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人关噪,你說我怎么就攤上這事鸟蟹。” “怎么了使兔?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵建钥,是天一觀的道長。 經常有香客問我虐沥,道長熊经,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任欲险,我火速辦了婚禮镐依,結果婚禮上,老公的妹妹穿的比我還像新娘天试。我一直安慰自己馋吗,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布秋秤。 她就那樣靜靜地躺著,像睡著了一般脚翘。 火紅的嫁衣襯著肌膚如雪灼卢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天来农,我揣著相機與錄音鞋真,去河邊找鬼。 笑死沃于,一個胖子當著我的面吹牛涩咖,可吹牛的內容都是我干的海诲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼檩互,長吁一口氣:“原來是場噩夢啊……” “哼特幔!你這毒婦竟也來了?” 一聲冷哼從身側響起闸昨,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤蚯斯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后饵较,有當地人在樹林里發(fā)現了一具尸體拍嵌,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年循诉,在試婚紗的時候發(fā)現自己被綠了横辆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡茄猫,死狀恐怖狈蚤,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情募疮,我是刑警寧澤炫惩,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站阿浓,受9級特大地震影響他嚷,放射性物質發(fā)生泄漏。R本人自食惡果不足惜芭毙,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一筋蓖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧退敦,春花似錦粘咖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钝域,卻和暖如春讽坏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背例证。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工路呜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓胀葱,卻偏偏與公主長得像漠秋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子抵屿,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容

  • Hive 是基于Hadoop 構建的一套數據倉庫分析系統(tǒng)庆锦,它提供了豐富的SQL查詢方式來分析存儲在Hadoop 分...
    三萬_chenbing閱讀 12,123評論 0 10
  • 時間:2017-08-16 19:36:53來源:CSDN Hive 是基于Hadoop 構建的一套數據倉庫分析系...
    majyer閱讀 1,473評論 0 2
  • 一、Json文件解析 案例:rating.json文件 {"movie":"1193","rate":"5","t...
    夙夜M閱讀 1,306評論 0 2
  • Hive是基于Hadoop的一個數據倉庫工具晌该,可以將結構化的數據文件映射為一張數據庫表肥荔,并提供類SQL查詢功能。本...
    felix521閱讀 1,296評論 0 0
  • 1.hive> show functions; 這些都是內置的函數 如何查看函數怎么使用朝群? 1)hive> des...
    白面葫蘆娃92閱讀 732評論 0 1