hadoop_统计文本单词WordCountReduce&WordCount
WordCountReduce.java
import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; import java.io.IOException; /* * Text 输入的字符串类型,序列化 * IntWritable 输入一串1,序列化 * Text 输出的字符串类型,序列化 * IntWritable 输出的求和数组,序列化*/ public class WordCountReduce extends Reducer<Text, IntWritable,Text,IntWritable> {//IntWritable序列化 /* * key 输入单词名字 * values 输入一串1 * content 用于输出的工具*/ @Override protected void reduce(Text key, Iterable<IntWritable> 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; /** * @Classname WordCount * @Description TODO * @Date 2019/12/6 22:12 * @Created by KingSSM */ 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"));//生成的文件夹中的最后一个文件里,16表示换行次数,1表示单词出现次数,单词之间以空格或换行分隔 //submit job.waitForCompletion(true); } }