hadoop/saprk 共同好友

Mapreduce算法

输入key value key是用户 value是用户的好友列表 ,构造新的key 是用户和其中一个好友,value是 用户的其余的好友列表,在归约器中求相同key 的value的交集

map(key, value){

        reducevalue=(...);

        foreach firend in reducevalue{

                     reducekey=buidSortedKey(persion,firend);

                      emit(reducekey, reducevalue);}

   }

reduce(key,value){

          outputkey=key;

           outputvalue=interection(list1,list2,listm);

          emit(outputkey,outputvalue);

}

 

spark实现方案

public class FindCommonFriends{

    public static void main(String[] args) throws Exception{

       //确认输入参数

      //创建sparkcontext上下文对象

      JavaSparkContext ctx = new JavaSparkContext();

      //从text创建RDD

      JavaRDD person = ctx.textfile("",1);

      //建立键值对,key为用户和客户对,value为客户列表

      JavaPairRDD, Iterable> pairs=person.flatMapToPair(

                                               new PairFlatMap Function,Iterable>(){

                             public Iterable,List>>call(String s){

                                             String[] tokens=s.split(",");

                                             long person = Long.parselong(tokens[0]);

                                              String friendAsString= tokens[1];

                                              String[] friendsAsTokenized= friendAsString.split(" ");

                                             if (friendsAsTokenized.length ==1){

                                                     Tuple2key = buidSortedTuple(person, Long.parseLong(frindsAsTokenized[0]));

                                                      return Arrays.asList(

                                                        new Tuple2,Iterable>(key, new ArrayList()))

                                                      };

                                             List friends = new ArrayList();

                                             for (String f : friendAsTokenized){

                                                          friends.add(Long.parselong(f));

                                                              }

                                             List,Iterable>> result=

                                                  new ArrayList,Iterable>>();

                                               for(Long f:friends){

                                                      result.add(new Tuple2,Iterable>)(key,friends);}

                                              

                                             

                                                     return result;

                                           }

                                  })

      //规约键值对

             JavaPairRDD,Iterable>> grouped=pairs.groupByKey();

     //从pair的客户列表中创建交集

             JavaPairRDD,Iterable> commonFriends=pairs.reduceByKey<

                                                                        new Function2<>,Iterable>(){

                               public Iterable call(Iterablea, Iterable b){

                                          Setx =Stets.newHashSet(a);

                                          Set intersection = new HashSet();

                                           for (Long item :b){

                                                   if (x.contains(item)){

                                                       intersection.add(item);}

                                                   }

                                             }

                                           return intersection;

                                         

                                          }

                               }

     //

     //

     //

     //

       }

}

你可能感兴趣的:(spark,hadoop)