Hive实现词频统计(详细讲解)

  Hive中提供了类似于SQL语言的查询语言——HiveQL,可以通过 HiveQL语句快速实现简单的 MapReduce统计, Hive 自身可以将 HiveQL 语句快速转换成 MapReduce 任务进行运行,而不必开发专门的 MapReduce 应用程序,因而十分适合数据仓库的统计分析。
  下面介绍如何使用Hive进行词频统计。

实验步骤

  1. 本地创建两个文本文件
cd /usr/local/hadoop/input
echo 'hello world' >> file1.txt
echo 'hello hadoop' >> file2.txt
  1. 将文件上传至hdfs中(因为hive的的操作是基于hdfs文件系统)
hadoop fs -mkdir -p /wordcount/input
hadoop fs -put /usr/local/hadoop/input/*.txt /wordcount/input
  1. 在hive下通过如下HiveQL语句实现统计功能
//表有一个string类型的字段
create table wordcount(line string);
   
//把数据导入到wordcount表 
load data inpath '/wordcount/input' overwrite into table wordcount ;   

//利用hive查询功能实现词频统计
//其中explode函数把wordcount表变成字段为word的w表
create table word_count as 

select word,count(1) as count from 
(select explode(split(line,' ')) as word from wordcount) w    
group by word
order by word;
  1. 查找结果
select * from word_count;

针对步骤3中HIve sql语句讲解

  • 首先创建一个普通表,只有一个字段line,类型为string。
create table wordcount(line string);
  • 然后把数据导入到wordcount表
load data inpath '/wordcount/input' overwrite into table wordcount ;   

此时导入后的样式大概是这样。
在这里插入图片描述

  • 然后我们利用hive查询功能实现词频统计

首先呢,我们先一起回忆一下sql语句基本常识。
as 可理解为:用作,当成,作为,或者更通俗的意思就是起别名
explode(split(line,’ ')) ,这个函数可以实现一行转多行的操作。
怎么说呢?看个例子。
在这里插入图片描述
这样一个表,此时呢我想把student中以逗号隔开的学生名字单独列出,也就是每个学生作为单独一条记录出现。此时就会用到它:explode(split(student,’,’))
转换后的样式如下:
在这里插入图片描述
明白了以上两点就基本可以读懂下面这条语句了。

create table word_count as 
select word,count(1) as count from 
(select explode(split(line,' ')) as word from wordcount) w    
group by word
order by word;
  1. 从wordcount表中把单词以空格分开并独立成行作为一条记录,赋给(as)字段名word,并把select出来的东西作为临时表w。
(select explode(split(line,' ')) as word from wordcount) w    

select出来的样式如下:
在这里插入图片描述
2. 在临时表w再次进行查询,用聚合函数count()统计每个单词出现的次数并赋给(as)字段名count,并按照word字段进行排序。

select word,count(1) as count from 
(select explode(split(line,' ')) as word from wordcount) w    
group by word
order by word;

注意:①count(1)等价于count(*),统计
   ②count()函数配合group by使用效果就是把同字段下相同的值合并为一个并统计出现的次数。
此时得到的表如下:
在这里插入图片描述
3. 最后再将上面这个表赋予(as)一个名字word_count。
得到结果如下:

create table word_count as 
select word,count(1) as count from 
(select explode(split(line,' ')) as word from wordcount) w    
group by word
order by word;

在这里插入图片描述
同时这也就是最后查询出来的结果。

  • 14
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青春是首不老歌丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值