import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; import java.io.IOException; public class WordCountReduce extends Reducer{//IntWritable序列化 @Override protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException { //求和 int sum=0; for(IntWritable number:values){//不能写int要写IntWritable //遍历一群1 sum += number.get(); } context.write(key,new IntWritable(sum));//sum是int型,没有序列化,不能直接输出,所以写成new IntWritable(sum) } }
WordCount.java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount {
public static void main(String[] args) throws Exception {
//定义配置对象
Configuration conf = new Configuration();
//定义一个工作任务对象
Job job = Job.getInstance(conf);
//获取map阶段的一个对象
job.setMapperClass(WordCountMap.class);
//指定map阶段的一个输出key
job.setMapOutputKeyClass(Text.class);
//指定map阶段输出的values类型
job.setMapOutputValueClass(IntWritable.class);
//map阶段的输入文件
FileInputFormat.setInputPaths(job,new Path("C:/Users/Admin/OneDrive/桌面/123.txt"));
//指定Reduce的类
job.setReducerClass(WordCountReduce.class);
//指定reduce阶段的一个输出key
job.setOutputKeyClass(Text.class);
//指定reduce阶段输出的values类型
job.setOutputValueClass(IntWritable.class);
//指定reduce阶段的输出文件
FileOutputFormat.setOutputPath(job,new Path("C:/Users/Admin/OneDrive/桌面/456.txt"));//生成的文件夹中的最后一个文件里,16表示换行次数,1表示单词出现次数,单词之间以空格或换行分隔
//submit
job.waitForCompletion(true);
}
}


