Hadoop:共同好友与二度人脉-1

目录

1 求取共同好友思路

 2 下面是具体的代码


类似求取共同好友、二度人脉这类的任务(当然这里的环境是使用Hadoop MapReuce程序实现)解法。

1 求取共同好友思路

数据记录格式如下:
  A:B,C,D,E,F 其中,A表示用户,":"后面的表示其好友列表。
分为两个MR步骤共4个阶段:

  1. 第一个任务的map阶段:写出的是(B A),(C A),(D A),(E A),(F A),表示A是哪些人的好友;
  2. 第一个任务的reduce阶段:写出的是(A    F,H,O,D,G,B,K,C,I),表示F,H…C,I均有A这个好友;
  3. 第二个任务的map阶段:写出的是(F-H A),(F-O A)…(H-0 A),(H-D A)…表示F-H 有共同好友A;
  4. 第二个任务的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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值