Java实现单词统计

原文链接:

https://www.toutiao.com/i6764296608705151496/

单词统计的是统计一个文件中单词出现的次数,比如下面的数据源

其中,最终出现的次数结果应该是下面的显示

那么在MapReduce中该如何编写代码并出现最终结果?

首先我们把文件上传到HDFS中(hdfs dfs –put …)

数据名称:data.txt,大小是size是2G

红黄绿三个块表示的是数据存放的块

然后数据data.txt进入map阶段,会以<K,V>(KV对)的形式进入,K表示的是:每行首字母相对于文件头的字节偏移量,V表示的是每一行的文本。

那么我可以用图表示:蓝色的椭圆球表示一个map,红黄绿数据块在进入map阶段的时候,数据的形式为左边红色的<K,V>(KV对)的形式

经过map处理,比如String.split(“”),做一次处理,数据会在不同的红黄绿数据块中变为下面的KV形式

我们在配置Hadoop的时候或设置reduce的数量,假如有两个reduce

Map执行完的数据会放到对应的reduce中,如下图

这个地方有一个简单的原理就是

Job.setNumReduce(2)会设置reduce的数量

而HashPartioner类可以利用 key.hashcode % reduce的结果,将不同的map结果输入到不同的reduce中,比如a-e开头的放到一个地方,e-z开头的放到一个地方,那么

这样的数据结果就会变成

好那么我们此时可以统计了,我开始编写代码

首先我们创建一个wordCount项目,我们创建的项目是maven项目

其中pom的配置部分

我们创建类

继承Mapper(注意注释)

编写代码

同样创建WordCountReducer,编写代码,利用前面的reduce思想理解

创建WordCountDriver类编写代码

导出项目jar

我们启动Hadoop

我们上传数据和jar包

将数据上传到hdfs上

执行下面语句

bin/yarn jar /data/wordCount/wordCount.jar com.xlglvc.xx.mapredece.wordcount_client.WordCountDriver /data.txt /outputwordcount

出了点问题,时间不同步

安装ntpdate工具

yum -y install ntp ntpdate

设置系统时间与网络时间同步

ntpdate cn.pool.ntp.org

然后重新执行,此时我们新选择个目录

bin/yarn jar /data/wordCount/wordCount.jar com.xlglvc.xx.mapredece.wordcount_client.WordCountDriver /data.txt /outputwordcount1

我们去浏览器查询

我们查看最终结果

bin/hdfs dfs -text /outputwordcount1/part-r-00000

出现我们想要的结果,统计完成

原文地址:https://www.cnblogs.com/bqwzy/p/12528446.html

时间: 2024-11-17 04:21:38

Java实现单词统计的相关文章

MapReduce 单词统计案例编程

MapReduce 单词统计案例编程 一.在Linux环境安装Eclipse软件 1.   解压tar包 下载安装包eclipse-jee-kepler-SR1-linux-gtk-x86_64.tar.gz到/opt/software目录下. 解压到/opt/tools目录下: [[email protected] tools]$ tar -zxf /opt/sofeware/eclipse-jee-kepler-SR1-linux-gtk-x86_64.tar.gz -C /opt/tool

手动实现一个单词统计MapReduce程序与过程原理分析

[toc] 手动实现一个单词统计MapReduce程序与过程原理分析 前言 我们知道,在搭建好hadoop环境后,可以运行wordcount程序来体验一下hadoop的功能,该程序在hadoop目录下的share/hadoop/mapreduce目录中,通过下面的命令: yarn jar $HADOOP_HOME/share/hadoop/mapreducehadoop-mapreduce-examples-2.6.4.jar wordcount inputPath outPath 即可对输入文

大数据阶段划分及案例单词统计

大数据阶段的重要课程划分 离线分析 : hadoop生态圈 HDFS, MapReduce(概念偏多), hive(底层是MapReduce), 离线业务分析80%都是使用hive 实时分析 : spark 数据结构 : 二叉树(面试) 动态规划, redis数据库, SSM三大框架 1. spring 2. springMVC 3. mybatis HDFSAPI HDFS创建目录 @Test public void mkdirTest() throws IOException { //1 获

Spark入门(三)--Spark经典的单词统计

spark经典之单词统计 准备数据 既然要统计单词我们就需要一个包含一定数量的文本,我们这里选择了英文原著<GoneWithTheWind>(<飘>)的文本来做一个数据统计,看看文章中各个单词出现频次如何.为了便于大家下载文本.可以到GitHub上下载文本以及对应的代码.我将文本放在项目的目录下. 首先我们要读取该文件,就要用到SparkContext中的textFile的方法,我们尝试先读取第一行. scala实现 import org.apache.spark.{SparkCo

运行Hadoop自带的wordcount单词统计程序

0.前言 前面一篇<Hadoop初体验:快速搭建Hadoop伪分布式环境>搭建了一个Hadoop的环境,现在就使用Hadoop自带的wordcount程序来做单词统计的案例. 1.使用示例程序实现单词统计 (1)wordcount程序 wordcount程序在hadoop的share目录下,如下: [[email protected] mapreduce]# pwd /usr/local/hadoop/share/hadoop/mapreduce [[email protected] mapr

Exercise: Maps (单词统计)

A Tour of Go Exercise: Maps https://tour.golang.org/moretypes/23 WordCount (单词统计) 是一个很经典的小程序了,在很多编程入门教程中都会出现. 这道题比较简单,但也有一些知识点值得一提. 上面这个答案我是参考了网上别人写的.但在参考别人之前我也自己解题了,其中,唯一不同之处是这一句: m[word]++ 我本来写的是: _, ok := m[word] if ok { m[word]++ } else { m[word]

《C++ Primer》P314中使用insert重写单词统计程序的扩展

编写程序统计并输出所读入的单词出现的次数 想与习题10-1相结合,也就是先输入几组 map<string, int>类型,存入vector中. 再输入单词word,如果已经存在则在key对应的value+1 如果不存在,则插入并使得其value为1. 之前的问题是->输入了一次之后,再要输入单词word,读不进.(呵呵 果然小白) 看到11章之后,知道要用语句cin.clear;使得输入流重新有效. 再然后 重新熟悉了iterator对map的操作. #include <iostr

一步一步写算法(之单词统计)

原文:一步一步写算法(之单词统计) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在面试环节中,有一道题目也是考官们中意的一道题目:如果统计一段由字符和和空格组成的字符串中有多少个单词? 其实,之所以问这个题目,考官的目的就是想了解一下你对状态机了解多少. (1) 题目分析 从题目上看,如果对一个字符串进行处理,那么可以有下面几种情形:初始状态,字符状态,空格状态,结束状态.那么这几种状态之间应该怎么迁移呢? 初始状态: 如果输入符号是

第三次作业(字符,单词统计)

题目要求:从文件中读取字符,然后统计字符的数目,和单词的数目. 首先打开一个文件,对里面存的东西进行统计,刚开始判断是否为单词的组成部分: 代码如下: FILE *fp;//文件指针 char c; //文件字符读取存储 fp = fopen("D:\\a\\a.txt", "r"); if (fp == NULL) { printf("文件打开失败"); return 0; } while (feof(fp) != 1) { c = fgetc