资源文件file.txt
hello hadoop
hello word
this is my first hadoop program
分析:一个文档中每行的单词通过空格分割后获取,经过map阶段可以将所有的单词整理成如下形式:
key:hello value:1
key:hadoop value:1
key:hello value:1
key:word value:1
key:this value:1
key:is value:1
key:my value:1
key:first value:1
key:hadoop value:1
key:program value:1
经过hadoop整理后以如下形式输入到Reduce中:
key:hello value:{1,1}
key:hadoop value: {1,1}
key:word value:{1}
key:this value: {1}
key:is value:{1}
key:myvalue: {1}
key:first value:{1}
key:program value:{1}
所以Reduce接受的时候是以Iterable<IntWritable> values最为值。在Reduce中我们就可以将value中的值迭代相加就可以得出该单词出现的次数。
实现:
package com.bwzy.hadoop;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.*;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
public class WordCount extends Configured implements Tool {public static class Mapextendsorg.apache.hadoop.mapreduce.Mapper<LongWritable, Text, Text, IntWritable> {private final static IntWritable one = new IntWritable(1);private Text word = new Text();public void map(LongWritable key,Text value,Context context){String line = value.toString();StringTokenizer tokenizer = new StringTokenizer(line);//读取每一行数据,并将该行数据以空格分割(StringTokenizer默认是以空格分割字符串)while (tokenizer.hasMoreTokens()) {word.set(tokenizer.nextToken());try {context.write(word, one);//输出给Reduce} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}}}public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {public void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException{int sum = 0;
//合并每个单词出现的次数for (IntWritable val : values) {sum+=val.get();}context.write(key, new IntWritable(sum));}}public static void main(String[] args) throws Exception {int ret = ToolRunner.run(new WordCount(), args);System.exit(ret);}@Overridepublic int run(String[] arg0) throws Exception {Job job = new Job(getConf());job.setJobName("wordcount");job.setOutputKeyClass(Text.class);//key--设置输出格式job.setOutputValueClass(IntWritable.class);//value--设置输出格式job.setMapperClass(Map.class);job.setReducerClass(Reduce.class);job.setInputFormatClass(TextInputFormat.class);job.setOutputFormatClass(TextOutputFormat.class);FileInputFormat.setInputPaths(job, new Path(arg0[0]));FileOutputFormat.setOutputPath(job, new Path(arg0[1]));boolean success = job.waitForCompletion(true);return success?0:1;}
}
运行:
1:将程序打包
选中打包的类-->右击-->Export-->java-->JAR file--填入保存路径-->完成
2:将jar包拷贝到hadoop的目录下。(因为程序中用到来hadoop的jar包)
3:将资源文件(存储这单词的文件,假设在/home/user/Document/file1.txt)上传到定义的hdfs目录下
创建hdfs目录命令(在hadoop已经成功启动的前提下):hadoop fs -mkdir /自定义/自定义/input
上传本地资源文件到hdfs上:hadop fs -put -copyFromLocal /home/user/Document/file1.txt /自定义/自定义/input
4:运行MapReduce程序:
hadoop jar /home/user/hadoop-1.0.4/WordCount.jar com.bwzy.hadoop.WordCount /自定义/自定义/input /自定义/自定义/output
说明:hadoop运行后会自动创建/自定义/自定义/output目录,在该目录下会有两个文件,其中一个文件中存放来MapReduce运行的结果。如果重新运行该程序,需要将/自定义/自定义/output目录删除,否则系统认为该结果已经存在了。
5:运行的结果为
hello 2
hadoop 2
word 1
this 1
is 1
my 1
first 1
program 1

转载于:https://blog.51cto.com/3157689/1350178

MapReduce经典案例——统计单词数相关推荐

  1. MapReduce经典案例总结

    MapReduce经典案例总结 首先得搭好hadoop环境,windows搭好单机环境 1.根据手机号统计上网流量,统计上行流量.下行流量和总流量 数据如下,文件 flow.log,上传到hadoop ...

  2. 信息学奥赛一本通 1400:统计单词数 | 1954:【11NOIP普及组】统计单词数 | OpenJudge NOI 1.12 05 | 洛谷 P1308 [NOIP2011 普及组] 统计单词数

    [题目链接] ybt 1400:统计单词数 ybt 1954:[11NOIP普及组]统计单词数 OpenJudge NOI 1.12 05:统计单词数 洛谷 P1308 [NOIP2011 普及组] ...

  3. linux统计单词程序,linux统计单词数

    sort +awk+uniq 统计文件中出现次数最多的前10个单词 实例 cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sor ...

  4. 14-luogu-P1308 [NOIP2011 普及组] 统计单词数

    文章目录 问题 [NOIP2011 普及组] 统计单词数 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 样例 #2 样例输入 #2 样例输出 #2 提示 我的错误代码 大神 ...

  5. MapReduce经典案例—TopN

    目录 一.问题介绍 (一)案例分析 1. TopN分析法介绍 2. 案例需求及分析 (二)案例实现 1. Map阶段实现 2. Reduce阶段实现 3. Driver程序主类实现 4. 效果测试 二 ...

  6. python【蓝桥杯vip练习题库】ADV-17统计单词数

    试题 算法提高 统计单词数 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 统计输入英文文章段落中不同单词(单词有大小写之分, 但统计时忽略大小写)各自出现的次数. 输入段落中所含单 ...

  7. c++ 新技能get 统计单词数

    123 DongDong prefers English words to English sentences, so he wants to count the words of a sentenc ...

  8. 信息学奥赛一本通(1400:统计单词数)

    1400:统计单词数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 21054     通过数: 6817 [题目描述] 一般的文本编辑器都有查找单词的功能,该功 ...

  9. 1.12.05 统计单词数

    05:统计单词数 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出 ...

最新文章

  1. .Net Framework 3.0 概述
  2. R语言使用across函数一次性将多个数据列进行离散化(categorize):或者pivot_longer函数转化为长表、对转化为长表的数值数据列进行离散化、pivot_wider将数据转化为宽表
  3. Swift 高级运算符
  4. GdiPlus[12]: IGPLinearGradientBrush 的其他构建方式
  5. __cdecl __fastcall与__stdcall
  6. django链接数据库报错Error loading MySQLdb module:No module named MySQLdb
  7. python教程视频-私藏已久的7个Python视频教程
  8. Linux查询存储信息,查询存储系统信息 - OceanStor UltraPath for Linux 21.5.0 用户指南 02 - 华为...
  9. 【S交换机技术连载帖】交换机在江湖系列-序言
  10. Mysql 关联查询 索引失效
  11. 怎么用python找资料_python去哪里找资源教程学习?
  12. Nvidia驱动支持的linux版本,完善支持 NVIDIA显卡Linux驱动275.19正式版
  13. Python爬虫爬取一页韩寒新浪博客
  14. ROS实战篇(一)如何在ROS中编写自己的package?------ 以节点通信为例
  15. 360浏览器极速模式和兼容模式
  16. Your cache folder contains root-owned files, due to a bug in npm ERR! previous versions of npm which
  17. 计算机格式化没有fat32,windows里面没有FAT32格式化命令
  18. 光栅渲染器(六)着色准备和深度缓存实现
  19. linux使用tmux后台运行程序
  20. gitlab密码忘了怎么办?

热门文章

  1. 程序员何苦为难程序员?
  2. 使用log4Net 输出日志到mongodb
  3. 缓冲运动之框架開始一级简单框架实例
  4. 常用的NSLOG日志打印格式
  5. [信息收集] HCOMP 2010概况及收录论文
  6. JS实现sleep功能 JS遍历document对象
  7. linux配置ip地址 suse_SUSE Linux下设置IP的两种方法
  8. html select选择事件_一道搜狗面试题:IO多路复用中select、poll、epoll之间的区别...
  9. delphi 软件在线人数统计_8款值得学习的科研论文作图软件
  10. ADC知识(2)——直流参数(输入电压参考,参考电流输入,积分非线性误差,差分非线性误差)...