单机版WordCount的代码实现

在学习MapReduce的时候,我们遇到的最经典的题目就是WordCount,也是相当于一个学习MapReduce的入门案例。相当于我们学习Java的时候关于HelloWord的编程实现。

这篇博客内容不多,主要分享一下单机版WordCount的代码实现,至于增强版的WordCount和其它有关于MapReduce的经典案例题目,笔者会在后面单独总结出来的。

首先,代码实现功能是:***统计6个文件里面的单词数量***。

以下是文件内容(6个文件的内容相同。)

单机版WordCount的代码实现_第1张图片

代码实现如下:

package LearningSelf;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

//统计6个文件的每个单词出现的总次数
/*
 * 1.分而治之   map
 * 创建6个流  每个流负责读取一个文件  统计这个文件的每个单词的次数
 * 2.合并上面的统计结果  进行最终的统计  reduce
 */
public class WordCount {
	public static void main(String[] args) throws IOException {
		Map file01map = readOneFile("D:\\wc\\wc01.txt");
		Map file02map = readOneFile("D:\\wc\\wc02.txt");
		Map file03map = readOneFile("D:\\wc\\wc03.txt");
		Map file04map = readOneFile("D:\\wc\\wc04.txt");
		Map file05map = readOneFile("D:\\wc\\wc05.txt");
		Map file06map = readOneFile("D:\\wc\\wc06.txt");
		System.out.println(file01map);
		System.out.println(file02map);
		System.out.println(file03map);
		System.out.println(file04map);
		System.out.println(file05map);
		System.out.println(file06map);
		//汇总统计,
		Map resultMap=mergeAllFile(file01map,file02map,file03map,file04map,file05map,file06map);
		System.out.println(resultMap);
	}
	//汇总统计最终的结果
	public static Map mergeAllFile(Map ... maps) {
		//结果集
		Map resmap=new HashMap();
		//循环每一个map
		for(Map m:maps){
			//循环遍历每一个map
			Set keys = m.keySet();
			for(String k:keys){
				//判断结果集中是否已经包含  
				//没有包含  直接放入
				if(!resmap.containsKey(k)){
					resmap.put(k, m.get(k));
				}else{
					//包含  将原来的值拿出+现在的值
					int newvalue=resmap.get(k)+m.get(k);
					resmap.put(k, newvalue);
				}
				
			}
		}
		return resmap;
	}
	//分而治之  统计每一个文件的
	public static Map readOneFile(String path) throws IOException{
		//创建一个输入流  
		BufferedReader br=new BufferedReader(new FileReader(path));
		//开始进行文件的读取
		//创建一个统计的容器
		Map map=new HashMap();
		String line=null;
		while((line=br.readLine())!=null){
			//获取的是每一行的单词数组
			String[] words = line.split("\t");
			//循环遍历所有的单词  进行统计  容器---map
			for(String w:words){
				//判断单词是否已经放入过
				//没有放入    key=w   value=1
				if(!map.containsKey(w)){
					map.put(w, 1);
				}else{
					//存在 value 取出原来的  +1
					int newvalue=map.get(w)+1;
					map.put(w, newvalue);
				}
			}
		}
		return map;
	}
	

}

运行结果如下:

单机版WordCount的代码实现_第2张图片

 

你可能感兴趣的:(MapReduce,MapReduce)