• 有趣的面试题



    MR找共同朋友,数据格式如下:

    A B C D E F
    B A C D E
    C A B E
    D A B E
    E A B C D
    F A

    第一字母表示本人,其他是他的朋友,找出有共同朋友的人,和共同朋友是谁

     1 import java.io.IOException;
     2 import java.util.Set;
     3 import java.util.StringTokenizer;
     4 import java.util.TreeSet;
     5 
     6 import org.apache.hadoop.conf.Configuration;
     7 import org.apache.hadoop.fs.Path;
     8 import org.apache.hadoop.io.Text;
     9 import org.apache.hadoop.mapreduce.Job;
    10 import org.apache.hadoop.mapreduce.Mapper;
    11 import org.apache.hadoop.mapreduce.Reducer;
    12 import org.apache.hadoop.mapreduce.Mapper.Context;
    13 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    14 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    15 import org.apache.hadoop.util.GenericOptionsParser;
    16 
    17 public class FindFriend {
    18         
    19           public static class ChangeMapper extends Mapper<Object, Text, Text, Text>{                      
    20                    @Override
    21                    public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
    22                              StringTokenizer itr = new StringTokenizer(value.toString());
    23                                  Text owner = new Text();
    24                                  Set<String> set = new TreeSet<String>();
    25                              owner.set(itr.nextToken());
    26                              while (itr.hasMoreTokens()) {
    27                                      set.add(itr.nextToken());
    28                              }             
    29                              String[] friends = new String[set.size()];
    30                              friends = set.toArray(friends);
    31                              
    32                              for(int i=0;i<friends.length;i++){
    33                                      for(int j=i+1;j<friends.length;j++){
    34                                              String outputkey = friends[i]+friends[j];
    35                                              context.write(new Text(outputkey),owner);
    36                                      }                                     
    37                              }
    38                    }
    39           }
    40           
    41           public static class FindReducer extends Reducer<Text,Text,Text,Text> {                          
    42                         public void reduce(Text key, Iterable<Text> values, 
    43                                         Context context) throws IOException, InterruptedException {
    44                                   String  commonfriends =""; 
    45                               for (Text val : values) {
    46                                   if(commonfriends == ""){
    47                                           commonfriends = val.toString();
    48                                   }else{
    49                                           commonfriends = commonfriends+":"+val.toString();
    50                                   }
    51                                }
    52                               context.write(key, new Text(commonfriends));                                
    53                         }                          
    54           }
    55           
    56 
    57         public static void main(String[] args) throws IOException,
    58         InterruptedException, ClassNotFoundException {
    59                 
    60             Configuration conf = new Configuration();
    61             String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
    62             if (otherArgs.length < 2) {
    63               System.err.println("args error");
    64               System.exit(2);
    65             }
    66             Job job = new Job(conf, "word count");
    67             job.setJarByClass(FindFriend.class);
    68             job.setMapperClass(ChangeMapper.class);
    69             job.setCombinerClass(FindReducer.class);
    70             job.setReducerClass(FindReducer.class);
    71             job.setOutputKeyClass(Text.class);
    72             job.setOutputValueClass(Text.class);
    73             for (int i = 0; i < otherArgs.length - 1; ++i) {
    74               FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
    75             }
    76             FileOutputFormat.setOutputPath(job,
    77               new Path(otherArgs[otherArgs.length - 1]));
    78             System.exit(job.waitForCompletion(true) ? 0 : 1);
    79                 
    80         }
    81 
    82 }

    运行结果:

    AB      E:C:D
    AC      E:B
    AD      B:E
    AE      C:B:D
    BC      A:E
    BD      A:E
    BE      C:D:A
    BF      A
    CD      E:A:B
    CE      A:B
    CF      A
    DE      B:A
    DF      A
    EF      A

    转自:http://www.aboutyun.com/thread-11107-1-1.html


  • 相关阅读:
    MAC下cocos2dx环境搭建
    eclipse混淆打包出错
    eclipseme升级
    MyEclipse 10 中增加插件
    j2me图片处理大全
    关于svn使用
    NFS相关
    BMP文件格式图解
    UDA1341TS
    OpenOCD初始化脚本(uboot)
  • 原文地址:https://www.cnblogs.com/admln/p/Interesting-interview-topic.html
Copyright © 2020-2023  润新知