Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.jbw.recommendsystem.add; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; 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.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; // yarn jar target/RecommendSystem-0.jar com.jbw.recommendsystem.add.AddMRD -Dinput=/user/jiabw/out/rs/join_1/part-r-00000 -Doutput=/user/jiabw/out/rs/add_0 /** * * @author alvin */ public class AddMRD extends Configured implements Tool { static class AddMapper extends Mapper<LongWritable, Text, Text, Text> { @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] dd = value.toString().split("\t"); context.write(new Text(dd[0].trim()), new Text(dd[1].trim())); } } static class AddReducer extends Reducer<Text, Text, Text, Text> { @Override protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException { Map<String, List<Double>> lm = new HashMap<>(); for (Text t : values) { String s = t.toString(); String ss = s.substring(1, s.length() - 1); String fs[] = ss.split(","); for (String st : fs) { String hg[] = st.split(":"); if (lm.containsKey(hg[0].trim())) { lm.get(hg[0].trim()).add(Double.parseDouble(hg[1].trim())); } else { List<Double> ll = new ArrayList<>(); ll.add(Double.parseDouble(hg[1].trim())); lm.put(hg[0].trim(), ll); } } } StringBuilder sb = new StringBuilder(); sb.append("["); for (String fd : lm.keySet()) { double sum = 0; for (Double dd : lm.get(fd)) { sum += dd; } sb.append(fd).append(":").append(sum).append(","); } sb.delete(sb.length() - 1, sb.length()); sb.append("]"); context.write(key, new Text(sb.toString())); } } @Override public int run(String[] strings) throws Exception { Configuration conf = getConf(); Path in = new Path(conf.get("input")); Path out = new Path(conf.get("output")); Job job = Job.getInstance(conf); job.setJobName("5"); job.setJarByClass(AddMRD.class); job.setMapperClass(AddMapper.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(Text.class); job.setReducerClass(AddReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(TextOutputFormat.class); TextInputFormat.addInputPath(job, in); TextOutputFormat.setOutputPath(job, out); return job.waitForCompletion(true) ? 0 : 1; } public static void main(String[] args) throws Exception { System.exit(ToolRunner.run(new AddMRD(), args)); } }