一、實(shí)戰(zhàn)概述
-
在這個(gè)實(shí)戰(zhàn)中,我們使用了Hive框架來(lái)處理學(xué)生的月考成績(jī)數(shù)據(jù)。首先,我們準(zhǔn)備了三個(gè)文本文件,分別包含了語(yǔ)文、數(shù)學(xué)和英語(yǔ)的月考成績(jī)數(shù)據(jù)。這些數(shù)據(jù)被上傳到HDFS的指定目錄。
-
接著,我們啟動(dòng)了Hive Metastore服務(wù),并通過(guò)Hive客戶端連接到Hive。在Hive中,我們創(chuàng)建了一個(gè)分區(qū)表
student_score
,用于存儲(chǔ)學(xué)生的成績(jī)數(shù)據(jù),其中分區(qū)字段為科目(subject)。 -
然后,我們按照科目將數(shù)據(jù)加載到分區(qū)表中,分別加載了語(yǔ)文、數(shù)學(xué)和英語(yǔ)的成績(jī)數(shù)據(jù)。通過(guò)這樣的分區(qū)方式,我們能夠更方便地對(duì)數(shù)據(jù)進(jìn)行查詢和分析。
-
最后,我們使用Hive的SQL語(yǔ)句進(jìn)行統(tǒng)計(jì),計(jì)算每個(gè)學(xué)生在三個(gè)科目上的月考平均分。使用了
AVG
函數(shù)和ROUND
函數(shù)來(lái)得到每個(gè)學(xué)生的平均分,并保留一位小數(shù)。這樣,我們得到了每個(gè)學(xué)生在語(yǔ)文、數(shù)學(xué)和英語(yǔ)三個(gè)科目上的月考平均分的統(tǒng)計(jì)結(jié)果。 -
整個(gè)實(shí)戰(zhàn)過(guò)程涉及了Hive的表創(chuàng)建、分區(qū)管理、數(shù)據(jù)加載和SQL查詢等操作,展示了Hive在大數(shù)據(jù)處理中的靈活性和便捷性。通過(guò)這次實(shí)戰(zhàn),我們能夠更好地理解和掌握Hive框架在數(shù)據(jù)分析和查詢中的應(yīng)用。
二、提出任務(wù)
- 語(yǔ)文月考成績(jī) -
chinese.txt
1 張曉云 89
2 張曉云 73
3 張曉云 67
4 張曉云 70
5 張曉云 79
6 張曉云 87
7 張曉云 99
8 張曉云 83
9 張曉云 97
10 張曉云 92
11 張曉云 67
12 張曉云 86
1 王東林 49
2 王東林 83
3 王東林 67
4 王東林 49
5 王東林 93
6 王東林 87
7 王東林 65
8 王東林 92
9 王東林 60
10 王東林 94
11 王東林 81
12 王東林 90
1 李宏宇 77
2 李宏宇 66
3 李宏宇 89
4 李宏宇 87
5 李宏宇 96
6 李宏宇 79
7 李宏宇 87
8 李宏宇 96
9 李宏宇 69
10 李宏宇 87
11 李宏宇 96
12 李宏宇 79
- 數(shù)學(xué)月考成績(jī) -
math.txt
1 張曉云 79
2 張曉云 83
3 張曉云 77
4 張曉云 90
5 張曉云 89
6 張曉云 67
7 張曉云 89
8 張曉云 93
9 張曉云 90
10 張曉云 82
11 張曉云 77
12 張曉云 96
1 王東林 78
2 王東林 94
3 王東林 76
4 王東林 70
5 王東林 90
6 王東林 83
7 王東林 85
8 王東林 82
9 王東林 84
10 王東林 78
11 王東林 99
12 王東林 93
1 李宏宇 86
2 李宏宇 81
3 李宏宇 76
4 李宏宇 93
5 李宏宇 88
6 李宏宇 82
7 李宏宇 81
8 李宏宇 93
9 李宏宇 86
10 李宏宇 90
11 李宏宇 67
12 李宏宇 88
- 英語(yǔ)月考成績(jī) -
english.txt
1 張曉云 78
2 張曉云 83
3 張曉云 92
4 張曉云 66
5 張曉云 82
6 張曉云 89
7 張曉云 79
8 張曉云 68
9 張曉云 96
10 張曉云 91
11 張曉云 87
12 張曉云 82
1 王東林 69
2 王東林 86
3 王東林 73
4 王東林 99
5 王東林 67
6 王東林 95
7 王東林 74
8 王東林 92
9 王東林 76
10 王東林 88
11 王東林 92
12 王東林 56
1 李宏宇 88
2 李宏宇 78
3 李宏宇 92
4 李宏宇 78
5 李宏宇 89
6 李宏宇 76
7 李宏宇 92
8 李宏宇 75
9 李宏宇 88
10 李宏宇 92
11 李宏宇 97
12 李宏宇 85
- 利用Hive框架,統(tǒng)計(jì)每個(gè)同學(xué)各科月考平均分
三、完成任務(wù)
(一)準(zhǔn)備數(shù)據(jù)
1、在虛擬機(jī)上創(chuàng)建文本文件
-
在master虛擬機(jī)上創(chuàng)建
chinese.txt
文件 -
創(chuàng)建
math.txt
文件 -
創(chuàng)建
english.txt
文件
2、上傳文件到HDFS指定目錄
-
創(chuàng)建
/subjectavg/input
目錄,執(zhí)行命令:hdfs dfs -mkdir -p /subjectavg/input
-
將文本文件
chinese.txt
、math.txt
與english.txt
,上傳到HDFS的/subjectavg/input
目錄
(二)實(shí)現(xiàn)步驟
1、啟動(dòng)Hive Metastore服務(wù)
- 執(zhí)行命令:
hive --service metastore &
,在后臺(tái)啟動(dòng)metastore
服務(wù)
2、啟動(dòng)Hive客戶端
- 執(zhí)行命令:
hive
,看到命令提示符hive>
3、創(chuàng)建分區(qū)的學(xué)生成績(jī)表
- 執(zhí)行語(yǔ)句:
CREATE TABLE student_score ( id INT, name STRING, score INT ) PARTITIONED BY (subject STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';
4、按分區(qū)加載數(shù)據(jù)
-
加載
chinese.txt
到chinese
分區(qū) -
加載
math.txt
到math
分區(qū) -
加載
english.txt
到english
分區(qū) -
在Hadoop WebUI里查看分區(qū)表對(duì)應(yīng)的分區(qū)目錄
-
數(shù)據(jù)文件,比如
chinese.txt
就在對(duì)應(yīng)分區(qū)目錄里
5、查看分區(qū)表全部記錄
- 執(zhí)行語(yǔ)句:
SELECT * FROM student_score;
1 張曉云 89 chinese
2 張曉云 73 chinese
3 張曉云 67 chinese
4 張曉云 70 chinese
5 張曉云 79 chinese
6 張曉云 87 chinese
7 張曉云 99 chinese
8 張曉云 83 chinese
9 張曉云 97 chinese
10 張曉云 92 chinese
11 張曉云 67 chinese
12 張曉云 86 chinese
1 王東林 49 chinese
2 王東林 83 chinese
3 王東林 67 chinese
4 王東林 49 chinese
5 王東林 93 chinese
6 王東林 87 chinese
7 王東林 65 chinese
8 王東林 92 chinese
9 王東林 60 chinese
10 王東林 94 chinese
11 王東林 81 chinese
12 王東林 90 chinese
1 李宏宇 77 chinese
2 李宏宇 66 chinese
3 李宏宇 89 chinese
4 李宏宇 87 chinese
5 李宏宇 96 chinese
6 李宏宇 79 chinese
7 李宏宇 87 chinese
8 李宏宇 96 chinese
9 李宏宇 69 chinese
10 李宏宇 87 chinese
11 李宏宇 96 chinese
12 李宏宇 79 chinese
1 張曉云 78 english
2 張曉云 83 english
3 張曉云 92 english
4 張曉云 66 english
5 張曉云 82 english
6 張曉云 89 english
7 張曉云 79 english
8 張曉云 68 english
9 張曉云 96 english
10 張曉云 91 english
11 張曉云 87 english
12 張曉云 82 english
1 王東林 69 english
2 王東林 86 english
3 王東林 73 english
4 王東林 99 english
5 王東林 67 english
6 王東林 95 english
7 王東林 74 english
8 王東林 92 english
9 王東林 76 english
10 王東林 88 english
11 王東林 92 english
12 王東林 56 english
1 李宏宇 88 english
2 李宏宇 78 english
3 李宏宇 92 english
4 李宏宇 78 english
5 李宏宇 89 english
6 李宏宇 76 english
7 李宏宇 92 english
8 李宏宇 75 english
9 李宏宇 88 english
10 李宏宇 92 english
11 李宏宇 97 english
12 李宏宇 85 english
1 張曉云 79 math
2 張曉云 83 math
3 張曉云 77 math
4 張曉云 90 math
5 張曉云 89 math
6 張曉云 67 math
7 張曉云 89 math
8 張曉云 93 math
9 張曉云 90 math
10 張曉云 82 math
11 張曉云 77 math
12 張曉云 96 math
1 王東林 78 math
2 王東林 94 math
3 王東林 76 math
4 王東林 70 math
5 王東林 90 math
6 王東林 83 math
7 王東林 85 math
8 王東林 82 math
9 王東林 84 math
10 王東林 78 math
11 王東林 99 math
12 王東林 93 math
1 李宏宇 86 math
2 李宏宇 81 math
3 李宏宇 76 math
4 李宏宇 93 math
5 李宏宇 88 math
6 李宏宇 82 math
7 李宏宇 81 math
8 李宏宇 93 math
9 李宏宇 86 math
10 李宏宇 90 math
11 李宏宇 67 math
12 李宏宇 88 math
6、按姓名和科目分組匯總平均分
- 執(zhí)行語(yǔ)句:
SELECT name, subject, ROUND(AVG(score), 1) AS average_score FROM student_score GROUP BY name, subject;
- 每個(gè)學(xué)生三科平均分倒是統(tǒng)計(jì)出進(jìn)來(lái)了,但是格式我們并不滿意,我們希望每個(gè)學(xué)生的三科平均分不是分占三行,而是在一行里顯示三科平均分。
7、按姓名統(tǒng)計(jì)每個(gè)學(xué)生三科月考平均分
-
執(zhí)行語(yǔ)句:
SELECT name, ROUND(AVG(CASE WHEN subject = 'chinese' THEN score ELSE NULL END), 1) AS chinese_avg, ROUND(AVG(CASE WHEN subject = 'math' THEN score ELSE NULL END), 1) AS math_avg, ROUND(AVG(CASE WHEN subject = 'english' THEN score ELSE NULL END), 1) AS english_avg FROM student_score GROUP BY name;
-
這個(gè)SQL查詢語(yǔ)句用于從一個(gè)名為
student_score
的表中檢索學(xué)生的平均分?jǐn)?shù),并按學(xué)生姓名進(jìn)行分組。以下是查詢的解釋說(shuō)明:
-
SELECT子句
-
name
: 選擇學(xué)生的姓名。 -
ROUND(AVG(CASE WHEN subject = 'chinese' THEN score ELSE NULL END), 1) AS chinese_avg
: 計(jì)算學(xué)生在"chinese"科目的平均分?jǐn)?shù),并將結(jié)果四舍五入到一位小數(shù)。使用CASE
語(yǔ)句,只有當(dāng)科目是"chinese"時(shí)才考慮該分?jǐn)?shù),否則將其視為NULL。 -
ROUND(AVG(CASE WHEN subject = 'math' THEN score ELSE NULL END), 1) AS math_avg
: 計(jì)算學(xué)生在"math"科目的平均分?jǐn)?shù),同樣將結(jié)果四舍五入到一位小數(shù)。 -
ROUND(AVG(CASE WHEN subject = 'english' THEN score ELSE NULL END), 1) AS english_avg
: 計(jì)算學(xué)生在"english"科目的平均分?jǐn)?shù),同樣將結(jié)果四舍五入到一位小數(shù)。
-
-
FROM子句文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-777908.html
-
student_score
: 表示數(shù)據(jù)來(lái)自名為student_score
的表。
-
-
GROUP BY子句文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-777908.html
-
GROUP BY name
: 將結(jié)果按學(xué)生姓名進(jìn)行分組,以便計(jì)算每個(gè)學(xué)生在不同科目上的平均分?jǐn)?shù)。
-
- 因此,這個(gè)查詢將返回一個(gè)結(jié)果集,其中包含每個(gè)學(xué)生的姓名以及他們?cè)?chinese"、"math"和"english"科目上的平均分?jǐn)?shù),四舍五入到一位小數(shù)。
四、實(shí)戰(zhàn)總結(jié)
- 本次實(shí)戰(zhàn)運(yùn)用Hive處理學(xué)生月考成績(jī)數(shù)據(jù),通過(guò)創(chuàng)建分區(qū)表、加載各科目成績(jī)至對(duì)應(yīng)分區(qū),并使用SQL語(yǔ)句計(jì)算平均分,展示了Hive在大數(shù)據(jù)管理、分析查詢及統(tǒng)計(jì)計(jì)算上的靈活性與便捷性。
到了這里,關(guān)于Hive實(shí)戰(zhàn):分科匯總求月考平均分的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!