Hive|在Hive中实现WordCount算法

资料准备https://wwyl.lanzoum.com/i2iA20tu0jcb

一、创建一个新的文件夹

1
hadoop fs -mkdir /hadoop_class/hive_wordcount

二、将student文档从本地上传到hadoop

1
hadoop fs -copyFromLocal ~/xiyouji_cut.txt /hadoop_class/hive_wordcount

(理论上一个文件夹只存放与该内容相关的文件,不存放多个,不然数据会合并。)

三、在hive里面创建表

将外部数据源中的数据映射为一个Hive表。

1
2
create external table xiyouji (line string)
location '/hadoop_class/hive_wordcount';

四、词频查询

使用Hive查询语言,从外部表”xiyouji”中选择每行数据,并将每行数据按照空格分隔符进行拆分,得到一个字符串数组。

然后,使用Hive函数”explode”将这个数组展开成多行数据,每行只包含一个字符串元素。接着,使用子查询和临时表”temp”将展开后的单词作为新的一列,对它们进行计数并重命名为”total”。

最后,使用”GROUP BY”将所有单词汇总,并按照”total”字段降序排序,返回前10个结果,这些结果表示出现频率最高的10个单词及它们在所有行数据中出现的总次数。

1
2
3
select word,count(1) as total from
(select explode(split(line," ")) as word from xiyouji) temp
group by word sort by total desc limit 10;

图片


其中,部分代码如解释下

选取一行拆分成数组:

1
select split(line," ") from xiyouji limit 1;

图片

选取十行拆分成数组,使用Hive函数”explode”将这个数组展开成多行数据,每行只包含一个字符串元素

1
select explode (split(line," ")) from xiyouji limit 10;

图片

至此,该项目已完成。