zoukankan      html  css  js  c++  java
  • 推荐算法

    package com.bw.mr;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URI;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Pattern;

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.NullWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.Mapper;
    import org.apache.hadoop.mapreduce.Reducer;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

    import com.bw.advice1.Step5;
    import com.bw.advice1.Step5.SMapper;

    /**
     * @author ghostwowo
     * A:B,C,D,E,F,G
     * B:C,E,F,D
     * C:G:D
     * D:F,H,J,K
     * 电话号
     * 求出每两个人的共同好友
     * A-B:C,E,F,D
     * B-A:C,E,F,D
     */
    public class Friends {
       public static class SMapper extends Mapper<LongWritable, Text, Text, Text>{
        Pattern p = Pattern.compile("[:,]");
        List<String> list = new ArrayList<String>();
    //    A:B,C,D,E,F,G
        @Override
        protected void setup(Mapper<LongWritable, Text, Text, Text>.Context context)
                throws IOException, InterruptedException {
            FileSystem fs = FileSystem.getLocal(context.getConfiguration());
            Path[] paths = context.getLocalCacheFiles();
            InputStream in = fs.open(paths[0]);
            BufferedReader bf = new BufferedReader(new InputStreamReader(in));
            String read = "";
            while((read=bf.readLine())!=null) {
                list.add(read);
            }
            bf.close();
            in.close();
            fs.close();
        }
           
        @Override
        protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Text>.Context context)
                throws IOException, InterruptedException {
    //        List
    //        A:B,C,D,E,F,G
    //        C:G:D
    //        B:C,E,F,D
    //        D:F,H,J,K
            
            
    //        B:C,E,F,D
            String strs[] = p.split(value.toString());
            String uid = strs[0];
            for(String s:list) {
                if(!s.startsWith(strs[0])) {
                    //如果不是以这个字母开头的(A:b,c,d   A:b,c,d)
                    String gthy = "";
                    for(int i=1;i<strs.length;i++) {
                        if(s.split(":")[1].indexOf(strs[i])>-1) {
                            //如果包含了,那么就保存起来
                            gthy+=","+strs[i];
                        }
                    }
                    int uid1Hashcode =s.split(":")[0].hashCode();
                    int uid2Hashcode = uid.hashCode();
                    context.write(new Text((uid1Hashcode*uid1Hashcode*uid1Hashcode+uid2Hashcode*uid2Hashcode*uid2Hashcode)+""),
                            new Text(s.split(":")[0]+"-"+uid+":"+gthy));
                    //1211323232323  A-B:E,F,G
                    //1211323232323  B-A:E,F,G
                    //A-B C
                    //B-A C
                    //A.HASHCODE*A.HASHCODE+D.HASHCODE*D.HASHCODE*D.HASHCODE*D.HASHCODE
                    //100   106
                    //B.HASHCODE+C.HASHCODE
                    // 102 104
                    //A-D D-A C-B B-C
                }
            }
        }
       }
       
       
       public static class SReducer extends Reducer<Text, Text, Text, Text>{
           @Override
        protected void reduce(Text arg0, Iterable<Text> arg1, Reducer<Text, Text, Text, Text>.Context arg2)
                throws IOException, InterruptedException {
               //A-B:
               String w = arg1.iterator().next().toString();
               String strs[] = w.split(":");
               if(strs.length>1) {
                   arg2.write(new Text(strs[0]), new Text(strs[1]));
               }
         }
       }
       
       
       public static void main(String []args) throws Exception{
            Configuration conf = new Configuration();
            Job job = Job.getInstance(conf);
            job.setJarByClass(Friends.class);
            job.setMapperClass(SMapper.class);
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(Text.class);
            
            job.setReducerClass(SReducer.class);
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(Text.class);
            
            FileInputFormat.addInputPath(job, new Path("friends.txt"));
            job.addCacheFile(new URI("friends.txt"));
            FileOutputFormat.setOutputPath(job, new Path("friendsRes"));
            job.waitForCompletion(true);
        }
       
    }

    建一个friend.txt

    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

    结果是

    B-D    ,A,E,F,L
    E-A    ,B,C,D,F,E,O
    D-C    ,F,A,D,I
    F-A    ,B,C,D,F,E,O
    F-B    ,A,C,E,K
    C-F    ,A,B,C,D,E,O,M
    G-B    ,A,C,E,K
    F-D    ,A,E,F,L
    G-C    ,F,A,D,I
    B-H    ,A,C,D,E,O
    G-D    ,A,E,F,L
    B-I    ,A,O
    A-J    ,B,O
    D-H    ,A,C,D,E,O
    C-I    ,A,O
    F-G    ,A,C,D,E,F
    I-D    ,A,E,F,L
    K-B    ,A,C,E,K
    H-F    ,A,B,C,D,E,O,M
    A-M    ,E,F,G
    H-G    ,A,C,D,E,F
    I-F    ,A,B,C,D,E,O,M
    E-J    ,B,O
    K-D    ,A,E,F,L
    L-C    ,F,A,D,I
    B-M    ,E,F,G
    I-G    ,A,C,D,E,F
    F-J    ,B,O
    H-I    ,A,O
    F-K    ,A,C,D
    E-L    ,D,E,F
    K-G    ,A,C,D,E,F
    O-B    ,A,C,E,K
    C-O    ,A,H,I,J
    K-H    ,A,C,D,E,O
    G-L    ,D,E,F
    O-D    ,A,E,F,L
    K-I    ,A,O
    G-M    ,E,F,G
    F-O    ,A,H,I,J
    O-G    ,A,C,D,E,F
    O-H    ,A,C,D,E,O
    I-O    ,A,H,I,J
    O-K    ,A,C,D

  • 相关阅读:
    浅析软件开发项目的前期沟通工作
    .net core 和 WPF 开发升讯威在线客服系统:实现对 IE8 的完全完美支持 【干货】
    产品的定价策略(一):想通过产品挣钱,首先你产品的目标客户得不差钱
    .net core 和 WPF 开发升讯威在线客服系统:使用线程安全的 BlockingCollection 实现高性能的数据处理
    .net core 和 WPF 开发升讯威在线客服系统:使用 TCP协议 实现稳定的客服端
    .net core 和 WPF 开发升讯威在线客服系统:使用 WebSocket 实现访客端通信
    Centos上配置两层nginx转发,把请求转发到外网
    真实字节二面:什么是伪共享?
    关于MVCC,我之前写错了,这次我改好了!
    从家庭主妇到格力老总,董明珠的大女主逆袭之路
  • 原文地址:https://www.cnblogs.com/wxk161640207382/p/10830278.html
Copyright © 2011-2022 走看看