统计共同好友--------->最终统计
统计共同好友(上)
统计共同好友(中)
统计共同好友(下)
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;
import java.io.IOException;
import java.util.Arrays;
public class FriendCount extends Configured implements Tool {
static class FriendMap extends Mapper
<LongWritable, Text,Text,Text> {
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String[] friendAndusers = line.split(":");
String friend = friendAndusers[0];
String[] users = friendAndusers[1].split(",");
Arrays.sort(users);
for (int i = 0; i <= users.length - 2; i++) {
for (int j = i + 1; j <= users.length - 1; j++) {
context.write(new Text("[" + users[i] + "-" + users[j] + "]:"), new Text(friend));
}
}
}
}
static class FriendReduce
extends Reducer<Text, Text, Text, Text> {
public void reduce
(Text user, Iterable<Text> friends, Context context)
throws IOException, InterruptedException {
StringBuffer sb = new StringBuffer();
for (Text friend0 : friends) {
sb.append(friend0).append(" ");
}
context.write(user, new Text(sb.toString()));
}
}
@Override
public int run(String[] strings) throws Exception {
Configuration conf=getConf();
String input =conf.get("input");
String output=conf.get("output");
Job job=Job.getInstance(conf);
job.setNumReduceTasks(1);
job.setJobName("FriendCount-hlm");
job.setJarByClass(this.getClass());
job.setMapperClass(FriendMap.class);
job.setReducerClass(FriendReduce.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setOutputFormatClass(TextOutputFormat.class);
job.setInputFormatClass(TextInputFormat.class);
TextInputFormat.addInputPath(job,new Path(input));
TextOutputFormat.setOutputPath(job,new Path(output));
return job.waitForCompletion(true)?0:-1;
}
public static void main(String[] args) throws Exception {
System.exit(
new ToolRunner().run(new FriendCount(),args)
);
}
}