Hive实现WordCount详解

摘要:
WordCount的逻辑就是给定一个/多个文本,统计出文本中每次单词/词出现的次数。网上找的一张MapReduce实现WordCount的图例,基本描述清楚了WordCount的内部处理逻辑。本文主要是从Hive使用的角度处理WordCount,就不赘述,之前的一篇博文有MapReduce实现WordCount的代码,可参考https://www.cnblogs.com/walker-/p/9669631.html。图1MapRecude实现WordCount图例二、Hive实现WordCount2.1SQL实现先直接上SQL语句,可以看出SQL实现确实比MapReduce实现要清爽得多。
一、WordCount原理

初学MapReduce编程,WordCount作为入门经典,类似于初学编程时的Hello World。WordCount的逻辑就是给定一个/多个文本,统计出文本中每次单词/词出现的次数。网上找的一张MapReduce实现WordCount的图例,基本描述清楚了WordCount的内部处理逻辑。本文主要是从Hive使用的角度处理WordCount,就不赘述,之前的一篇博文有MapReduce实现WordCount的代码,可参考https://www.cnblogs.com/walker-/p/9669631.html

Hive实现WordCount详解第1张

图1 MapRecude实现Word Count图例

二、Hive实现WordCount

2.1 SQL实现

先直接上SQL语句,可以看出SQL实现确实比MapReduce实现要清爽得多。大概实现流程分为三步:

  • 分割本文。根据分割符对文本进行分割,切分出每个单词;
  • 行转列。对分割出来的词进行处理,每个单词作为一行;
  • 统计计数。统计每个单词出现的次数。
SELECT word, count(1) AS count FROM(SELECT explode(split(line, '
')) AS word FROMdocs) w
GROUP BYword
ORDER BY word;

2.2 实现细节

1. 准备文本内容

新建一个 /home/kwang/docs.txt 文本,文本内容如下:

hello world
hello kwang rzheng

2. 新建hive表

这里由于hive环境建表默认格式是ORC,直接load数据hive表无法直接读取,故建表时指定了表格式。

CREATE TABLE`docs`(
  `line` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'STORED ASINPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat'OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';

3. 加载数据到hive表中

加载数据到hive表中有两种方式,一种是从Linux本地文件系统加载,一种是从HDFS文件系统加载。

(1)从Linux本地文件系统加载

LOAD DATA LOCAL INPATH '/home/kwang/docs.txt' OVERWRITE INTO TABLE docs;

(2)从HDFS文件系统加载

首先需要将文件上传到HDFS文件系统

$ hadoop fs -put /home/kwang/docs.txt /user/kwang/

其次从HDFS文件系统加载数据

LOAD DATA INPATH 'docs.txt' OVERWRITE INTO TABLE docs;

加载数据到hive表后,查看hive表的内容,和原始文本格式并没有区别,将文本按行存储到hive表中,可以通过 'select * from docs;' 看下hive表内容:

hello world
hello kwang rzheng

4. 分割文本

分割单词SQL实现:

SELECT split(line, 's') AS word FROM docs;

分割后结果:

["hello","world"]
["hello","kwang","rzheng"]

可以看出,分割后的单词仍是都在一行,无法实现想要的功能,因此需要进行行转列操作。

5. 行转列

行转列SQL实现:

SELECT explode(split(line, ' ')) AS word FROM docs;

转换后的结果:

hello
world
hello
kwang
rzheng

6. 统计计数

SELECT word, count(1) AS count FROM(SELECT explode(split(line, ' ')) AS word FROMdocs) w
GROUP BYword
ORDER BY word;

统计后结果:

hello   2kwang   1rzheng  1world   1

至此,Hive已实现WordCount计数功能。

【参考资料】

[1].https://www.oreilly.com/library/view/programming-hive/9781449326944/ch01.html

免责声明:文章转载自《Hive实现WordCount详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C++内存读写例子spring批量更新数据 ---- BatchPreparedStatementSetter下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

hive函数之~集合统计函数

1、个数统计函数: count *** 语法: count(*), count(expr), count(DISTINCT expr[, expr_.])返回值: int说明: count(*)统计检索出的行的个数,包括NULL值的行;count(expr)返回指定字段的非空值的个数;count(DISTINCT expr[, expr_.])返回指定字段...

将Mongodb的表导入到Hive中

1.官方文档:https://docs.mongodb.com/ecosystem/tools/hadoop/ 2.Hive介绍:   Hive特点:     1.hive是一个数据仓库,和oracle,mysql等数据仓库相比,它底层依赖于hdfs。   2.hive是sql解析引擎,将sql语句转换成Map/Reduce任务,然后在hadoop hdf...

Doris扩展能力 踏雪扬尘

目录 审计日志插件 Doris On ES 创建ES索引 Doris中创建ES外表 Doris output plugin Hive External Table of Doris Doris 插件框架 ODBC External Table Of Doris 调试工具 审计日志插件 Doris 的审计日志插件是在 FE 的插件框架基础上开发...

Hive基础之Hive数据类型

Hive数据类型    参考:中文博客:http://www.cnblogs.com/ggjucheng/archive/2013/01/03/2843448.html          英文:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types    1、列类型    ...

HiveSQL 数据操控、查询语言(DML、DQL)

第一章 DML-Load加载数据 1.1 背景 回想一下,当在Hive中创建好表之后,默认就会在HDFS上创建一个与之对应的文件夹,默认路径是由参数hive.metastore.warehouse.dir控制,默认值是/user/hive/warehouse。 要想让hive的表和结构化的数据文件产生映射,就需要把文件移到到表对应的文件夹下面,当然,可以在...

Hadoop Sentry 学习

什么是Sentry?          Sentry 是Cloudera 公司发布的一个Hadoop开源组件,它提供细粒度基于角色的安全控制 Sentry下的数据访问和授权         通过引进Sentry,Hadoop目前可在以下方面满足企业和政府用户的RBAC(role-based acess control)需求: 安全授权:Sentry可以控制...