package com.hadoop.study;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
/**
*
* @author:戴桥冰 2015-10-6 上午10:33:54 content:hadoop的单词统计案例
*/
public class WordCount {
/**
* map代码块
*/
static class MapperCount extends
Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable intValue = new IntWritable(1);
private Text text = new Text();
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
// 获取每行数据
String lineValue = value.toString();
// 对每行进行分割
//StringTokenizer strTokenizer = new StringTokenizer(lineValue);
String[] line=lineValue.split("");
// 遍历
/*while (strTokenizer.hasMoreTokens()) {
String wordCount = strTokenizer.nextToken();
text.set(wordCount);
System.out.println(wordCount);
// 上下文输出map处理的key,value
context.write(text, intValue);
}*/
for(int i=0;i<line.length;i++){
text.set(line[i]);
// 上下文输出map处理的key,value
context.write(text, intValue);
}
}
}
/**
* reduce代码块
*/
static class ReduceCount extends
Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result=new IntWritable();
protected void reduce(Text keys, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
int sum=0;
//循环遍历
for(IntWritable val:values){
sum+=val.get();
}
result.set(sum);
context.write(keys, result);
};
}
public static void main(String[] args) throws Exception {
//获取配置信息
Configuration conf=new Configuration();
//创建Job,设置配置和job名称和
Job job=new Job(conf,"wordcount");
//1设置job运行的类
job.setJarByClass(WordCount.class);
//2设置map和reduce运行的类
job.setMapperClass(MapperCount.class);
job.setReducerClass(ReduceCount.class);
//3设置输入文件的目录和输出文件的目录
FileInputFormat.addInputPath(job,new Path("/opt/data/test.txt"));
FileOutputFormat.setOutputPath(job, new Path("/opt/data/hadoop/test/out"));
//4设置输出结果的key,value的类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//5提交job等待运行结果,并在客户端运行输出信息
boolean isSuccess=job.waitForCompletion(true);
//结束程序
System.exit(isSuccess?0:1);
}
}
相关文章
- 【问题描述】 编写程序统计一个英文文本文件中每个单词的出现次数(词频统计),并将统计结果按单词出现频率由高至低输出到指定文件中。 注:在此单词为仅由字母组成的字符序列。包含大写字母的单词应将大写字母转
- Python----统计字符串中的英文字母、空格、数字和其它字符的个数。
- java字符串统计字母个数_java8 统计字符串字母个数的几种方法总结(推荐)
- python统计句子中单词个数_Python实现统计单词出现的个数
- 统计字符串中每个字母的个数 C语言
- Python选择与循环结构之生成随机密码:编写程序,在26个字母大小写和10个数字组成的列表中随机生成10个8位包含大写字母,小写字母和数字的密码。
- 二叉树之统计二叉树中叶子节点的个数
- python分别统计出其中英文字母、空格、数字和其它字符的个数
- Java编程实现统计一个文本文件中,字母出现的次数或单词出现的次数
- 本题要求编写程序,输入N个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。