java用数组实现单词计数,MapReduce实现单词计数原理及Java编程:WordCount

MapReduce实现单词计数:WordCount

单词计数的文本信息(hello.txt):

hello can i help you

i have a dream

maybe you can help me

​ 实现过程:

​ Map过程:并行读取文本,对读取的单词进行Map操作,每个词将会形成。

​ 第一行将会形成:

​ 第二行生成

​ 第三行生成

​ Map会根据key值,自动按照ASCII值进行排序,所以,相同key值得K/V值,将会被放到一起

​ Reduce过程:对map的结果进行合并,计算,

​ Map将key相同得值放到了一起,所以当Reduce拿到从Map传过来得数据,可以理解为如下

​ 而Reduce进行最后得合并,就会得到如下得结果

​ 最后输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g8x0hrTQ-1578386385884)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20200107162331181.png)]

Java Api 编写

public class WordCountApp {

//静态类,用于继承Mapper类,用于继承Mapper方法

public static class MyMapper extends Mapper{//mapper的四种参数类型(源码使用了泛型,具体可以查看源码)

//IntWritable与Text是Hadoop中的两个参数,可以简单的理解为是

//在hadoop中的int与text格式

private final static IntWritable one =new IntWritable(1);

private Text word =new Text();

//map操作

public void map(Object key ,Text value ,Context context)throws IOException,InterruptedException{

//StringTokenizer是Java.util中的类,用于将字符串切割成

//一个字符串数组(用" "把各个字符分隔开)。

StringTokenizer itr =new StringTokenizer(value.toString());

//遍历文本中一行的所有字符串

while (itr.hasMoreTokens()){

word.set(itr.nextToken());

//写入到map的输出文件中,这个context用于Reduce的接收

context.write(word,one);

}

}

}

//静态类,用于继承Reduce类,编写Reduce方法

public static class MyReduce extends Reducer{

//统计计数,即记录单词的出现次数,最后输出的辅助类

private final static IntWritable result =new IntWritable();

//reduce操作

public void reduce(Text key , Iterablevalues, Context context)throws IOException,InterruptedException{

//记录单词的出现个数,因为在Reduce中没有int类型,所以要

//用IntWritable进行包装

int sum=0;

//上面讲到,Reduce拿到Map的值的形式,这个Reduce会执行在每

//一个块中,用于计数,所以每一个单词都是从0开始计数

for (IntWritable val : values){

sum +=val.get();

}

//int sum包装进 IntWritable

result.set(sum);

//写入到最终会输出的地方

context.write(key,result);

}

}

//主方法

public static void main(String[] args) throws IOException, URISyntaxException, ClassNotFoundException, InterruptedException {

//本此编码是在Windowx编程,所以要加Hdfs的路径

String INPUT_PATH="hdfs://10.30.60.3:8020/a";

String OUTPUT_PATH="hdfs://10.30.60.3:8020/b";

Configuration configuration =new Configuration();

final FileSystem fileSystem=FileSystem.get(new URI(INPUT_PATH),configuration);

//确保INPUT的路径存在,而OutPut得路径会在最后生成结果时生成、

//所以确保OUTPUT得文件不存在

if(fileSystem.exists(new Path(OUTPUT_PATH))){

fileSystem.delete(new Path(OUTPUT_PATH),true);

}

//设置job

Job job =Job.getInstance(configuration,"WordCountApp");

//设置主类

job.setJarByClass(WordCountApp.class);

//设置mapper

job.setMapperClass(MyMapper.class);

//设置Mapper的输出格式

job.setMapOutputKeyClass(Text.class);

job.setMapOutputValueClass(IntWritable.class);

//设置Reduce

job.setReducerClass(MyReduce.class);

//设置Reduce格式

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

//设置输入格式

job.setInputFormatClass(TextInputFormat.class);

Path inputPath=new Path(INPUT_PATH);

FileInputFormat.addInputPath(job,inputPath);

//设置输出格式

job.setOutputValueClass(TextOutputFormat.class);

Path outputPath=new Path(OUTPUT_PATH);

FileOutputFormat.setOutputPath(job,outputPath);

//提交

System.exit(job.waitForCompletion(true)? 0:1);

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python理论知识选择题_Python基础自测题答案和基础知识梳理

Python基础自测题答案和基础知识梳理 1.关于Python中的lambda表达式的函数体自能是单独一条语句,所以答案选择C。 例如:>>>g lambda x: 2*x1 g(3) 7 2.Python中的变量不需要事先声明,但是需要创建和赋值,否则你怎么用&a…

STM32f4 ARM Bootloader

参考资料: 基于ARM 的嵌入式系统Bootloader 启动流程分析 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计) Android系统启动流程 -- bootloader 在main()之前,IAR都做了啥? STM32 IAP程序 源码 和测试代码 有详细的…

查找算法之顺序查找

参考: 1. 顺序查找 | 博客园 基本思想: 顺序查找,就是从第一个元素开始,按索引顺序遍历待查找序列,直到找出给定目标或者查找失败。 特点: 1. 对待查序列(表)无要求 -- 待查找序列可…

matlab kfda,SVD与KFDA相结合人脸识别-matlab-毕业论文

XXXXxx毕业设计(论文)最高达到88%。当在抽取的特征维数为39,PCA空间的投影维数为110的情况下,随着训练样本个数的增加,LDA的识别情况如表4所示表4 ORL人脸库LDA测试结果(2)训练样本数 识别率/% 识别时间/S3 68.2 52.3594 87.92 31.5315 88.00…

python数据预测_python时间序列预测股票走势

提示:这只是个训练模型,技术不具备实际意义,入市需谨慎。 首先调用tushare包 import tushare as ts import pandas as pd import matplotlib.pyplot as plt 查自己比较感兴趣的股票,这里我查找的是新能源/燃料电池/氢燃料&#xf…

30.Android之百度地图简单学习

今天用了下百度地图,简单写了一个例子,记录下。 一、申请AK(API Key) 要想使用百度地图sdk,就必须申请一个百度地图的api key。申请流程挺简单的。 首先注册成为百度的开发者,然后打开http://lbsyun.baidu.…

在datatable中,在指定位置插入列

假如dataset ds 里面已经存在了数据,当我们想在datatable中插入一列数据,可以用以下方法实现:ds.Tables[0].Columns.Add("star");ds.Tables[0].Columns["star"].SetOrdinal(0);这样“star”列就添加到datatable的第一列了…

python爬取b站弹幕_爬取B站弹幕并且制作词云

目录 SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。 爬取弹幕 1. 从手机端口进入网页爬取找到接口 2.代码 import requests from lxml import etree import numpy as np urlhttps://api.bilibili.com/x/v1…

myeclipse始终build workspace

之前我的myeclipse运行某个项目的时候&#xff0c;总是不停的buildworkspace&#xff0c;而且稍微改动一个(不管是java类还是jsp)都会加载接近1分钟甚至更久&#xff0c;从网上搜了好久&#xff0c;先总结下搜的多数方法 1、叫你去掉.project文件的一段话 <buildCommand>…

python控制灯_Python 控制树莓派 GPIO 输出:控制 LED 灯

树莓派 GPIO 控制输出的入门应该都是从控制 LED 灯开始的吧。 树莓派版本&#xff1a;Model 3B 树莓派系统&#xff1a;Raspbian Stretch with desktop and recommended software&#xff0c;April 2019 连接装置 准备一个 LED 灯&#xff0c;两个两头都为母的杜邦线。对照下图…

图论:弦图最小点染色

弦图的定义&#xff1a;当图中任意长度大于3的环都至少有一个弦时&#xff0c; 一个无向图称为弦图 不存在四角、五角等关系就说明这个图是一个弦图 题目问的是&#xff0c;任何一对相互认识的人不可以组一队&#xff0c;问最多可以组多少对 所有的人构成的关系图是一个弦图&am…

报错型sql注入原理分析

0x00&#xff1a;前言关于sql注入&#xff0c;经久不衰&#xff0c;现在的网站一般对sql注入的防护也相对加强了&#xff0c;2016年的***测试报告中&#xff0c;出现最多的是xss&#xff08;跨站脚本***&#xff09;和明文传输等&#xff0c;但是对sql注入的利用方式&#xff0…

matlab矩阵 0,matlab zeros初始化为0矩阵

zeros为创建一个值为零的数组&#xff1b;如matrix1zeros(4,5);%4*5的矩阵&#xff0c;矩阵中每个元素都为0matrix2zeros(4,5,3);%4*5*3的数组&#xff0c;数组中每个元素都为0下面举一个将图像存到数组的例子对RGB图片1.jpg&#xff0c;2.jpg&#xff1b;大小为700*500*3创建4…

HDU 2199

人生中第一道搜索题 精度精度、&#xff01;&#xff01;&#xff01; 1 #include<iostream>2 #include<algorithm>3 #include<cmath>4 #include<cstdio>5 using namespace std;6 double f(double x)7 {8 return 8*pow(x,4.0)7*pow(x,3.0)2*pow(x,…

python文件编译_编译Python文件

编译Python文件 一、编译Python文件 为了提高加载模块的速度&#xff0c;强调强调强调&#xff1a;提高的是加载速度而绝非运行速度。python解释器会在__pycache__目录中下缓存每个模块编译后的版本&#xff0c;格式为&#xff1a;module.version.pyc。通常会包含python的版本号…

SDN-博客收集

1、云网融合的多云网络转载于:https://www.cnblogs.com/snowwhite/p/9624404.html

php cookie 字串,php入门(字符串,cookie,session)

php入门(字符串,cookie,session)&#xff0c;有需要的朋友可以参考下。字符串获取字符串的长度: strlen()函数获取中文字长echo mb_strlen($str,”UTF8”);英文字符串截取$stri love you;复制代码//截取love这几个字母echo substr($str, 2, 4);//为什么开始位置是2呢&#xff0…

批处理命令Start

2019独角兽企业重金招聘Python工程师标准>>> 运行hello.exe&#xff08;最小化&#xff09; start /MIN hello.exe 用记事本打开readme.txt&#xff08;最大化&#xff09; start /MAX notepad readme.txt 打开网页 start http://www.baidu.com/ 调用另外一个脚本&…

vim乱码的解决

解决vim文件乱码&#xff0c;打开文件乱码&#xff0c;菜单&#xff0c;提示信息乱码&#xff1a; 有四个跟字符编码方式有关的选项&#xff0c;encoding、fileencoding、fileencodings、termencoding 在linux中修改.vimrc&#xff08;在win中是_vimrc&#xff09;A&#xff0c…