Hive词频统计

数据准备

在/root目录下新建word.txt
输入几行单词,单词之间以空格隔开
Hello Hadoop
Hello HDFS
Hello MapReduce
Hello Hive
Hello HBase
Hello Pig

在Hive中创建表text(line string)

将word.txt加载到表text中

查看text表

词频统计

对于这个text表,我们如何将其中的每行的单词进行统计呢?
由于一行文本有多个单词,所以我们需要将每行的文本切割成单个的单词,这里我们需要使用split函数:

每行文本已经被切割开来,但是得到的是数组类型,并不是Hive能直接通过group by处理的形式,所以我们需要使用Hive的另一个高级函数explode。
explode函数的功能是行转列(俗称炸裂),也就是说将上面我们得到的数组中的每个元素生成一行。

使用group by来对炸裂开来的数据进行统计。
将上面得到的结果作为另一张表t(子查询),然后对这张表进行统计。

将所有单词按照降序排列,同时输出最高频次的三个单词

将查询结果存入另一张表wc中。

查看wc表

本实验介绍了如何通过hive实现单词统计,旨在加深了解Hive这个基于HDFS的数据仓库。

Hive词频统计

数据准备

在/root目录下新建word.txt
输入几行单词,单词之间以空格隔开
Hello Hadoop
Hello HDFS
Hello MapReduce
Hello Hive
Hello HBase
Hello Pig

在Hive中创建表text(line string)

将word.txt加载到表text中

load data local inpath '/root/word.txt' overwrite into table text;

查看text表

select * from text;

词频统计

对于这个text表,我们如何将其中的每行的单词进行统计呢?
由于一行文本有多个单词,所以我们需要将每行的文本切割成单个的单词,这里我们需要使用split函数:

select split(line,' ') from text;

每行文本已经被切割开来,但是得到的是数组类型,并不是Hive能直接通过group by处理的形式,所以我们需要使用Hive的另一个高级函数explode。
explode函数的功能是行转列(俗称炸裂),也就是说将上面我们得到的数组中的每个元素生成一行。

select explode(split(line,' ')) as word from text;

使用group by来对炸裂开来的数据进行统计。
将上面得到的结果作为另一张表t(子查询),然后对这张表进行统计。

select t.word,count(*) from (select explode(split(line,' '))as word from text) as t group by t.word;

将所有单词按照降序排列,同时输出最高频次的三个单词

select t.word,count(*) as c from (select explode(split(line,' '))as word from text) as t group by t.word order by c desc limit 3;

将查询结果存入另一张表wc中。

create table wc as select t.word,count(*) c from (select explode(split(line,' '))as word from text) as t group by t.word order by c desc limit 3;

查看wc表

本实验介绍了如何通过hive实现单词统计,旨在加深了解Hive这个基于HDFS的数据仓库。