Hive实战:词频统计

发布时间:2023年12月26日

文章目录

  • 一、实战概述
  • 二、提出任务
  • 三、完成任务
    • (一)准备数据文件
      • 1、在虚拟机上创建文本文件
      • 2、将文本文件上传到HDFS指定目录
    • (二)实现步骤
      • 1、启动Hive Metastore服务
      • 2、启动Hive客户端
      • 3、基于HDFS文件创建外部表
      • 4、利用Hive SQL进行词频统计
      • 5、演示分步完成词频统计

一、实战概述

  • 在本次实战中,我们任务是在大数据环境下使用Hive进行词频统计。首先,我们在master虚拟机上创建了一个名为test.txt的文本文件,内容包含一些关键词的句子。接着,我们将该文本文件上传到HDFS的/hivewc/input目录,作为数据源。

  • 随后,我们启动了Hive Metastore服务和Hive客户端,为数据处理做准备。在Hive客户端中,我们创建了一个名为t_word的外部表,该表的结构包含一个字符串类型的word字段,并将其位置设置为HDFS中的/hivewc/input目录。这样,Hive就可以直接读取和处理HDFS中的文本数据。

  • 为了进行词频统计,我们编写了一条Hive SQL语句。该语句首先使用explodesplit函数将每个句子拆分为单个单词,然后通过子查询对这些单词进行计数,并按单词进行分组,最终得到每个单词的出现次数。

  • 通过执行这条SQL语句,我们成功地完成了词频统计任务,得到了预期的结果。这个过程展示了Hive在大数据处理中的强大能力,尤其是对于文本数据的分析和处理。同时,我们也注意到了在使用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 --service metastore &,在后台启动metastore服务
    在这里插入图片描述

2、启动Hive客户端

  • 执行命令:hive,看到命令提示符hive>
    在这里插入图片描述

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

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

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

  • 要删除外部表,使用truncate table <外部表名>

4、利用Hive SQL进行词频统计

  • 编写Hive SQL语句,进行词频统计
  • 执行命令:select word, count(*) from (select explode(split(word, ' ')) word from t_word) t_word_1 group by word;
  • 注意:子查询(select explode(split(word,' ')) word from t_word)必须取别名(比如t_word_1),否则会报错。
    在这里插入图片描述
  • 这个Hive SQL语句的主要功能是对文本数据中的单词进行词频统计,即计算每个单词在文本中出现的次数。
  1. select word, count(*) from: 这部分是SQL的基本结构,表示我们要选择word字段和每个word字段值的计数。

  2. (select explode(split(word, ' ')) word from t_word) t_word_1: 这是一个子查询。

    • explode(split(word, ' ')): split(word, ' ')函数会根据空格将每一行的word字段值分割成一个数组。explode函数则会将这个数组扩展为多行,每行包含数组中的一个元素。这样,原来的一行文本就变成了多行,每行只包含一个单词。
    • t_word_1是给这个子查询结果取的别名,这是Hive的要求,对于嵌套查询的结果需要指定别名。
  3. group by word: 这部分指示Hive对查询结果进行分组,具体来说,是按照word字段的值进行分组。在分组之后,对于每个唯一的word值,Hive都会计算其出现的次数(通过count(*))。

  • 综上所述,这个Hive SQL语句的作用是:首先,使用explodesplit函数将原始文本数据中的句子拆分为单个单词;然后,通过子查询将这些单词作为新的行进行处理;最后,按照单词进行分组并计算每个单词的出现次数。执行该语句后,结果将显示每个单词及其在文本中出现的次数。

5、演示分步完成词频统计

  • 创建v_word视图,执行命令:CREATE VIEW v_word AS SELECT explode(split(word, ' ')) AS word FROM t_word;
    在这里插入图片描述
  • 查看v_word视图的记录,执行命令:SELECT * FROM v_word;
    在这里插入图片描述
  • v_word视图按word字段分组统计个数,执行命令:SELECT word, count(*) FROM v_word GROUP BY word;
    在这里插入图片描述
文章来源:https://blog.csdn.net/howard2005/article/details/135219581
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。