MapReduce之求一组数据中最大值问题

来源:互联网 发布:美团程序员工资待遇 编辑:程序博客网 时间:2024/06/01 08:17

一、题目要求:

求出一组数据中的最大值。

二、代码:

import java.io.IOException;import java.util.Iterator;import java.util.StringTokenizer;import java.io.*;import java.util.*;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.Partitioner;import org.apache.hadoop.mapreduce.Mapper.Context;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.util.GenericOptionsParser;public class max {    private static String SPACE = "\t";    public static class Map extends    Mapper<LongWritable, Text, Text, Text> {        // 实现map函数        private Text word1=new Text("score");        //private Text word2=new Text("distribution");        public void map(LongWritable key, Text value, Context context)        throws IOException, InterruptedException {             String line = value.toString();             StringTokenizer tokenizerArticle = new StringTokenizer(line);  //以空格分隔字符            while (tokenizerArticle.hasMoreElements()) {                String  strScore = tokenizerArticle.nextToken();                context.write(word1,new Text(strScore));            }        }    }    public static class Reduce extends    Reducer<Text, Text, Text, IntWritable> {        public void reduce(Text key, Iterable<Text> values,        Context context) throws IOException, InterruptedException {            int max    =    0   ;            //int i=0;            int score  =    0   ;            for (Text val : values) {                String valTokens = val.toString();                score = Integer.parseInt(valTokens);                if (score > max) {                    //name1 = valTokens[0];                     max  = score;                }            }            //context.write(new Text("The max score is"), new IntWritable(max));          context.write(new Text("The max is"),new IntWritable(max));       }    }    public static void main(String[] args) throws Exception {        Configuration conf = new Configuration();        String[] otherArgs = new GenericOptionsParser(conf, args)                .getRemainingArgs();        if (otherArgs.length != 2) { // 判断路径参数是否为2个            System.err.println("Usage: Data Deduplication <in> <out>");            System.exit(2);        }        // set maprduce job name        Job job = new Job(conf, "max");        job.setJarByClass(max.class);        // 设置Map、Combine和Reduce处理类        job.setMapperClass(Map.class);        job.setReducerClass(Reduce.class);        job.setMapOutputKeyClass(Text.class);        job.setMapOutputValueClass(Text.class);        job.setOutputKeyClass(Text.class);        job.setOutputValueClass(IntWritable.class);        //job.setNumReduceTasks(6);        FileInputFormat.addInputPath(job, new Path(otherArgs[0]));        FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));        System.exit(job.waitForCompletion(true) ? 0 : 1);    }}

三、输入:
这里写图片描述

输入:
这里写图片描述

四、输出:
这里写图片描述

原创粉丝点击