数据
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
思路
- 在Map1阶段实现:从A关注了A:B,C,D,F,E,O 到谁被A关注的转变
- 在Reduce1阶段实现:X被A关注到 X:A,B,C,D X被abcd同时关注的转变
- 在Map2阶段实现:从A,B,C,D X被abcd同时关注到 A-B:X A-C:X 即ab共同关注X的转变
- 在Reduce2阶段实现:从A-B:X ab的共同好友X到A-B:X1,X2的转变
Map1阶段
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class FFMapper1 extends Mapper<LongWritable, Text, Text, Text> {
private Text k = new Text();
private Text v = new Text();
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String[] words = value.toString().split(":");
/**
* 从A关注了,变为被A关注
* A:****** ------> *:A
* Reducer以*排序,每一组都是被的key都被value同时关注
*/
v.set(words[0]);
for (String s : words[1].split(",")) {
k.set(s);
context.write(k,v);
}
}
}
Reduce1阶段
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
public class FFReducer1 extends Reducer<Text, Text, Text, Text> {
private Text v =