首先我们要使用的数据如下
A:B,C,D,F,E,O
B:A,C,E,K
C:F,A,D,I
D:A,E,F,L
E:B,C,D,M,L
F:A,B,C,D,E,O,M
G:A,C,D,E,F
H:A,C,D,E,O
I:A,O
J:B,O
K:A,C,D
L:D,E,F
M:E,F,G
O:A,H,I,J
要想实现共同好友,首先,我们先求出哪些用户是他的好友,如B是A的好友,C是A的好友,D是A的好友…
那么我们以好友为key,用户为value向第一个Reduce中传输数据,传输的数据就会是:
key:B value:A
key:C value:A
key:D value:A
…
这样,我们在Reduce合并数据后,就变成了
key:B value:A,…
key:C value:A,…
key:D value:A,…
MapReduce01
import org.apache.hadoop.conf.Configuration;
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.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import java.io.IOException;
public class FirendMapReduce01 {
public static class MapTask extends Mapper<LongWritable, Text, Text, Text> {
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//读取一行数据
String line = value.toString();
//将数据按照“:”拆分 splits[0]为用户,splits[1]为该用户好友
String[] splits = line.split(":");
//将好友按照“,”拆分
String[] firends = splits[1].split(",");
//循环写出信息格式为: key:好友,value:用户
for (String firend : firends)