程序员の奇妙冒险

返回
Hive Hadoop Hive
2025-04-10 11:31 阅读:107 评论:0

使用Hive代替MapReduce实现单词统计

在 https://www.cnblogs.com/osinn/p/18813258 这篇文章中讲述了Hadoop使用MapReduce实现经典单词统计案例,这次写一篇如何使用Hive代替MapReduce实现单词统计 准备本地文本文件 首先本地磁盘创建一个wordcount.txt文件,并且添加以

  • 在 https://www.cnblogs.com/osinn/p/18813258 这篇文章中讲述了Hadoop使用MapReduce实现经典单词统计案例,这次写一篇如何使用Hive代替MapReduce实现单词统计

准备本地文本文件

  • 首先本地磁盘创建一个wordcount.txt文件,并且添加以下内容
1
2
3
4
itczw
hadoop

创建文本表以及载入数据

1
2
3
4
5
6
7
8
--
CREATE TABLE raw_text (line STRING);
 
-- hive /home/xxxx/wordcount.txt wordcount.txt
LOAD DATA LOCAL INPATH '/home/xxxx/wordcount.txt' INTO TABLE raw_text;
 
-- SQL
select * from raw_text;

image

使用HiveQL实现单词统计

创建结果表

  • 用于存放统计结果
1
CREATE TABLE word_count (word STRING, count INT);
执行单词统计
1
2
3
4
5
INSERT INTO TABLE word_count
SELECT word, COUNT(1) AS count
FROM raw_text
LATERAL VIEW EXPLODE(SPLIT(line, ' ')) lv AS word
GROUP BY word;
查看单词统计结果
1
select * from word_count;

image

通过 INSERT 插入新数据

1
INSERT INTO TABLE raw_text values('猪刚烈 猪刚烈 美猴王');

重新统计

  • 如果还是使用上次的统计SQL,那么word_count表有保留上次统计的结果,插入新的统计结果,单词统计就会有重复统计,上次统计结果和这次的统计结果
  • 如果只想保留最新的统计结果有两种方式,一是清空word_count表数据再执行统计,二是统计时使用覆盖的方式
方式一
1
2
3
4
5
6
7
8
9
-- word_count
TRUNCATE TABLE word_count;
 
--
INSERT INTO TABLE word_count
SELECT word, COUNT(1) AS count
FROM raw_text
LATERAL VIEW EXPLODE(SPLIT(line, ' ')) lv AS word
GROUP BY word;
方式二
  • 统计结果覆盖之前的统计
1
2
3
4
5
INSERT OVERWRITE TABLE word_count
SELECT word, COUNT(1) AS count
FROM raw_text
LATERAL VIEW EXPLODE(SPLIT(line, ' ')) lv AS word
GROUP BY word;
评论 (0)
暂无评论 来抢沙发吧~