在这个实战中,我们使用了Hive框架来处理学生的月考成绩数据。首先,我们准备了三个文本文件,分别包含了语文、数学和英语的月考成绩数据。这些数据被上传到HDFS的指定目录。
接着,我们启动了Hive Metastore服务,并通过Hive客户端连接到Hive。在Hive中,我们创建了一个分区表student_score
,用于存储学生的成绩数据,其中分区字段为科目(subject)。
然后,我们按照科目将数据加载到分区表中,分别加载了语文、数学和英语的成绩数据。通过这样的分区方式,我们能够更方便地对数据进行查询和分析。
最后,我们使用Hive的SQL语句进行统计,计算每个学生在三个科目上的月考平均分。使用了AVG
函数和ROUND
函数来得到每个学生的平均分,并保留一位小数。这样,我们得到了每个学生在语文、数学和英语三个科目上的月考平均分的统计结果。
整个实战过程涉及了Hive的表创建、分区管理、数据加载和SQL查询等操作,展示了Hive在大数据处理中的灵活性和便捷性。通过这次实战,我们能够更好地理解和掌握Hive框架在数据分析和查询中的应用。
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
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
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
subjectavg
目录,在里面创建chinese.txt
文件(数据没有显示全)math.txt
(数据没有显示全)english.txt
(数据没有显示全)/subjectavg/input
目录,执行命令:hdfs dfs -mkdir -p /subjectavg/input
chinese.txt
、math.txt
与english.txt
,上传到HDFS的/subjectavg/input
目录hive --service metastore &
,在后台启动metastore
服务hive
,看到命令提示符hive>
create table student_score ( id int, name string, score int ) partitioned by (subject string) row format delimited fields terminated by ' ';
chinese.txt
到chinese
分区math.txt
到math
分区english.txt
到english
分区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
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;