Hive实战:统计总分与平均分

一、实战描述

  • 本次实战主要聚焦于使用Hive框架对成绩数据进行处理和分析。任务目标是基于一个包含六个字段(姓名、语文、数学、英语、物理、化学)的成绩表,计算每个学生的总分和平均分。
  • 首先,我们在虚拟机上创建了一个名为score.txt的文本文件,其中包含了五名学生的成绩记录。然后,我们将该文件上传到HDFS的指定目录/hivescore/input中。
  • 接下来,我们启动了Hive Metastore服务,并通过执行命令行启动了Hive客户端。在客户端中,我们创建了一个名为t_score的内部Hive表,该表的结构与成绩表的字段相匹配。我们使用load data命令将HDFS中的成绩数据加载到t_score表中。
  • 最后,我们编写了一条Hive SQL语句,用于计算每个学生的总分和平均分。该语句根据学生的姓名进行分组,并对每个学生的所有科目成绩进行求和和求平均值。结果集包含了每个学生的姓名、总分和平均分。
  • 通过这次实战,我们展示了如何利用Hive框架处理和分析大规模数据,以及如何通过简单的SQL语句实现复杂的数据统计和计算任务。这一过程不仅体现了Hive在大数据处理中的高效性和便利性,也为我们提供了宝贵的实践经验,为进一步的数据分析工作奠定了基础。

二、提出任务

  • 成绩表,包含六个字段(姓名、语文、数学、英语、物理、化学),有五条记录
姓名语文数学英语物理化学
李小双8978949687
李丽霞9480867880
吴雨涵9067858260
张晓燕8776907959
陈燕文9795928886
  • 利用Hive框架,计算每个同学的总分与平均分

三、完成任务

(一)准备数据文件

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

  • 在master虚拟机上创建score.txt文件
    请添加图片描述

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

  • 在HDFS上创建/hivescore/input目录
    请添加图片描述

  • 将score.txt文件上传到HDFS的/hivescore/input目录

  • 执行命令:hdfs dfs -put score.txt /hivescore/input
    请添加图片描述

(二)实现步骤

1、启动Hive Metastore服务

  • 执行命令:hive --service metastore &,在后台启动metastore服务
    请添加图片描述

2、启动Hive客户端

  • 执行命令:hive,看到命令提示符hive>
    请添加图片描述
    请添加图片描述

3、创建Hive表,加载HDFS数据文件

  • 创建内部表t_score
  • 执行命令: create table t_score ( name string, chinese int, math int, english int, physics int, chemistry int ) row format delimited fields terminated by ’ ';

在这里插入图片描述

  • 在MySQL的hive数据库的TBLS表里可以查看内部表t_score对应的记录
    在这里插入图片描述
  • 加载成绩数据文件到内部表t_score,执行命令:load data inpath ‘/hivescore/input/score.txt’ into table t_score;

在这里插入图片描述

  • 查看成绩表全部记录,执行语句:select * from t_score;

在这里插入图片描述

4、利用Hive SQL统计总分与平均分

  • 编写Hive SQL语句,进行词频统计
  • 执行命令:SELECT name, SUM(chinese + math + english + physics + chemistry) AS total_score, (SUM(chinese + math + english + physics + chemistry)) / 5 AS average_score FROM t_score GROUP BY name;

在这里插入图片描述

  • 这个SQL语句的功能是在一个名为t_score的表中,根据学生的姓名(name)进行分组,并对每个学生各科成绩进行统计计算。
    1、SELECT name: 选择t_score表中的name列,表示我们要按照姓名来显示结果。
    2、SUM(chinese + math + english + physics + chemistry) AS total_score: 对每个学生的语文、数学、英语、物理和化学成绩进行求和,并将这一结果命名为total_score。这将计算出每个学生的总分。
    3、AVG(chinese + math + english + physics + chemistry) AS average_score: 对每个学生的语文、数学、英语、物理和化学成绩进行求平均值,并将这一结果命名为average_score。这将计算出每个学生的平均分。
    4、FROM t_score: 指定数据来源是名为t_score的表。
    5、GROUP BY name: 根据name列进行分组,这意味着对于表中的每一条具有不同姓名的记录,都会分别进行总分和平均分的计算。
  • 因此,这个SQL语句的最终功能是输出一个结果集,其中包含每个学生的姓名、他们的总分以及平均分。

四、拓展练习

  • 改变输出格式

  • 输出格式:
    (吴雨涵,384,76.8)
    (张晓红,391,78.2)
    (李小双,444,88.8)
    (王丽霞,418,83.6)
    (陈燕文,458,91.6)

  • 执行命令:SELECT CONCAT('(',name,',',total_score,',',average_score,')') AS result FROM (SELECT name,SUM(chinese + math + english + physics + chemistry) AS total_score, (SUM(chinese + math + english + physics + chemistry)) / 5 AS average_score FROM t_score GROUP BY name ) AS subquery;

在这里插入图片描述

  • 45
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值