文章目录

一、实战概述二、提出任务三、完成任务(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录

(二)实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、创建分区的学生成绩表4、按分区加载数据5、查看分区表全部记录6、按姓名和科目分组汇总平均分7、按姓名统计每个学生三科月考平均分

四、实战总结

一、实战概述

在这个实战中,我们使用了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

利用Hive框架,统计每个同学各科月考平均分

三、完成任务

(一)准备数据

1、在虚拟机上创建文本文件

在master虚拟机上创建chinese.txt文件 创建math.txt文件 创建english.txt文件

2、上传文件到HDFS指定目录

创建/subjectavg/input目录,执行命令:hdfs dfs -mkdir -p /subjectavg/input 将文本文件chinese.txt、math.txt与english.txt,上传到HDFS的/subjectavg/input目录

(二)实现步骤

1、启动Hive Metastore服务

执行命令:hive --service metastore &,在后台启动metastore服务

2、启动Hive客户端

执行命令:hive,看到命令提示符hive>

3、创建分区的学生成绩表

执行语句:CREATE TABLE student_score ( id INT, name STRING, score INT ) PARTITIONED BY (subject STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';

4、按分区加载数据

加载chinese.txt到chinese分区 加载math.txt到math分区 加载english.txt到english分区 在Hadoop WebUI里查看分区表对应的分区目录 数据文件,比如chinese.txt就在对应分区目录里

5、查看分区表全部记录

执行语句: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、按姓名和科目分组汇总平均分

执行语句:SELECT name, subject, ROUND(AVG(score), 1) AS average_score FROM student_score GROUP BY name, subject; 每个学生三科平均分倒是统计出进来了,但是格式我们并不满意,我们希望每个学生的三科平均分不是分占三行,而是在一行里显示三科平均分。

7、按姓名统计每个学生三科月考平均分

执行语句: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; 这个SQL查询语句用于从一个名为student_score的表中检索学生的平均分数,并按学生姓名进行分组。以下是查询的解释说明:

SELECT子句

name: 选择学生的姓名。ROUND(AVG(CASE WHEN subject = 'chinese' THEN score ELSE NULL END), 1) AS chinese_avg: 计算学生在"chinese"科目的平均分数,并将结果四舍五入到一位小数。使用CASE语句,只有当科目是"chinese"时才考虑该分数,否则将其视为NULL。ROUND(AVG(CASE WHEN subject = 'math' THEN score ELSE NULL END), 1) AS math_avg: 计算学生在"math"科目的平均分数,同样将结果四舍五入到一位小数。ROUND(AVG(CASE WHEN subject = 'english' THEN score ELSE NULL END), 1) AS english_avg: 计算学生在"english"科目的平均分数,同样将结果四舍五入到一位小数。 FROM子句

student_score: 表示数据来自名为student_score的表。 GROUP BY子句

GROUP BY name: 将结果按学生姓名进行分组,以便计算每个学生在不同科目上的平均分数。

因此,这个查询将返回一个结果集,其中包含每个学生的姓名以及他们在"chinese"、"math"和"english"科目上的平均分数,四舍五入到一位小数。

四、实战总结

本次实战运用Hive处理学生月考成绩数据,通过创建分区表、加载各科目成绩至对应分区,并使用SQL语句计算平均分,展示了Hive在大数据管理、分析查询及统计计算上的灵活性与便捷性。

相关阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。