First Mapper从另一个块(文件)生成输出,生成的第一部分文件保存来自块2的数据。
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 MainMaxTemp {
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.err.println("Usage: MaxTemperature <input path> <output path>");
System.exit(-1);
}
Job job = new Job();
job.setNumReduceTasks(2);
job.setJarByClass(MainMaxTemp.class);
job.setJobName("Max temperature");
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setMapperClass(WeatherData.class);
// job.setReducerClass(MaxTemperatureReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class WeatherData extends Mapper<LongWritable, Text, Text, IntWritable> {
private static final int MISSING = 9999;
@Override
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String words[]=line.split(" ");
String year = words[0];
int airTemperature;
airTemperature=Integer.parseInt(words[1]);
context.write(new Text(year), new IntWritable(airTemperature));
}
}
输入文件1 1901年23 1902年67 1902年89 1901年101 1889年至1990年 1700 189 1901年 - 9月
输入文件2 2901 23 2902 67 2902 89 2901 101 2889 -90 2700 189 2901 -9
部分档案1 1700 189 1889年至1990年 1902年89 1902年67 2901 -9 2901 101 2901 23
部分档案2 1901年至199年 1901年101 1901年23 2700 189 2889 -90 2902 89 2902 67