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的数据仓库。