一、实战概述

  • 在大数据实战中,我们利用Hive对存储在HDFS的文本数据进行词频统计。首先,我们在master虚拟机创建test.txt文件,并将其上传至HDFS的/hivewc/input目录作为输入源。随后启动Hive Metastore服务和客户端,创建名为t_word的外部表映射至该HDFS路径,使Hive能够直接访问并解析文本内容。为实现词频统计,精心编写了Hive SQL语句,运用explode和split函数将句子拆分单词,并通过子查询配合GROUP BY进行单词计数。最终成功执行SQL获取每个单词的出现频率,充分展示了Hive处理大规模文本数据的强大功能与灵活性,同时强调了在使用过程中如子查询别名等关键细节要点。

二、提出任务

  • 文本文件test.txt
hello hadoop hello hive
hello hbase hello spark
we will learn hadoop
we will learn hive
we love hadoop spark
  • 进行词频统计,结果如下
hadoop  3
hbase   1
hello   4
hive    2
learn   2 
love    1
spark   2
we      3
will    2

三、完成任务

(一)准备数据文件

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

  • 在master虚拟机上创建test.txt文件
    在这里插入图片描述

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

  • HDFS上创建/hivewc/input目录
    在这里插入图片描述
  • test.txt文件上传到HDFS的/hivewc/input目录
    在这里插入图片描述

(二)实现步骤

1、启动Hive Metastore服务

  • 我们需要启动Hive Metastore服务,这是Hive的元数据存储服务。
  • 执行命令:hive --service metastore &
    在这里插入图片描述

2、启动Hive客户端

  • 执行命令:`cd /opt/module/hive/``
  • hive这是我的hive启动方式,有可能你们的方式不一样
    在这里插入图片描述
  • 一旦我们看到命令提示符hive>,就表示我们已经成功进入Hive客户端。
    在这里插入图片描述

3、基于HDFS文件创建外部表

  • 基于/hivewc/input下的文件创建外部表t_word,执行命令:create external table t_word(word string) location '/hivewc/input';
    在这里插入图片描述

  • 在查看hive数据库中的表之前,应该先进入mysql,执行use metastore;命令,以此来指定数据库来执行操作。
    在这里插入图片描述

  • MySQL的hive数据库的TBLS表里,我们可以查看外部表t_word对应的记录。
    在这里插入图片描述

  • 加载成绩数据文件到内部表t_score,执行命令:load data inpath '/hivewc/input/test.txt' into table t_word;
    在这里插入图片描述

4、查询单词表,所有单词成一列

  • 查看单词表记录,执行语句:select word from t_word;
    在这里插入图片描述

  • 按空格拆分行数据,执行语句:select split(word , ' ') from t_word;
    在这里插入图片描述

  • 让单词成一列,执行语句:select explode(split(word , ' ')) as word from t_word;
    在这里插入图片描述

5、基于查询结果创建视图

  • 基于查询结果创建了一个视图v_word,执行语句:create view v_word as select explode(split(word , ' ')) as word from t_word;
    在这里插入图片描述

  • 查询视图的全部记录,执行语句:select word from v_word;
    在这里插入图片描述

6、基于视图进行分组统计

  • 基于视图分组统计操作,执行语句:select word, count(*) from v_word group by word;
  • 执行后我的会报这个错误,那么在此之前执行set hive.exec.mode.local.auto=true;命令,然后再次执行语句
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

7、基于嵌套查询一步搞定

  • 为了更简便地实现相同的效果,使用嵌套查询:SELECT word, COUNT(*) FROM (SELECT explode(split(word, ' ')) AS word FROM t_word) AS v_word GROUP BY word;
    在这里插入图片描述

四、总结

  • 该SQL语句通过一系列操作对名为t_word的表中的单词进行统计分析。首先,利用split函数按空格分割word字段内容,形成单词数组;接着,借助explode函数将数组转换为多行记录,每一行代表原字符串中的一个独立单词,并赋予这个临时结果集别名v_word。进一步地,对新生成的v_word表以word字段进行GROUP BY操作,即将所有相同的单词聚合在一起。最后,运用COUNT(*)函数计算每个分组(即每个单词)的数量,从而得出各个单词在原始数据集中出现的频率,实现了对t_word表中单词使用情况的详细统计。
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐