目录
类似求取共同好友、二度人脉这类的任务(当然这里的环境是使用Hadoop MapReuce程序实现)解法。
1 求取共同好友思路
数据记录格式如下:
A:B,C,D,E,F 其中,A表示用户,":"后面的表示其好友列表。
分为两个MR步骤共4个阶段:
- 第一个任务的map阶段:写出的是(B A),(C A),(D A),(E A),(F A),表示A是哪些人的好友;
- 第一个任务的reduce阶段:写出的是(A F,H,O,D,G,B,K,C,I),表示F,H…C,I均有A这个好友;
- 第二个任务的map阶段:写出的是(F-H A),(F-O A)…(H-0 A),(H-D A)…表示F-H 有共同好友A;
- 第二个任务的reduce阶段:写出的是(F-H A,D,C)…,表示F-H的所有共同好友。
2 下面是具体的代码
- StepOneMapper.java
package hadoop.common.friends;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class StepOneMapper extends Mapper<LongWritable, Text,Text,Text> {
private static Text key = new Text();
private static Text val = new Text();
@Override
protected void map(LongWritable a, Text value, Context context) throws IOException, InterruptedException {
//A:B,C,D,E,F
String line = value.toString();
String[] userAndFriends = line.split(":");
String user = userAndFriends[0];
String friends = userAndFriends[1];
for (String friend:friends.split(",")){
key.set(friend);
val.set(user);
context.write(key,val);
}
}
}
- StepOneReducer.java
package hadoop.common.friends;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
public class StepOneReducer extends Reducer<Text,Text