`
乡里伢崽
  • 浏览: 112311 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mapreduce '找共同朋友',面试题

 
阅读更多
mapred找共同朋友,数据格式如下:

引用

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


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



答案如下:


import java.io.IOException;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
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.Mapper.Context;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

public class FindFriend {
        
          public static class ChangeMapper extends Mapper<Object, Text, Text, Text>{                      
                   @Override
                   public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
                             StringTokenizer itr = new StringTokenizer(value.toString());
                                 Text owner = new Text();
                                 Set<String> set = new TreeSet<String>();
                             owner.set(itr.nextToken());
                             while (itr.hasMoreTokens()) {
                                     set.add(itr.nextToken());
                             }             
                             String[] friends = new String[set.size()];
                             friends = set.toArray(friends);
                             
                             for(int i=0;i<friends.length;i++){
                                     for(int j=i+1;j<friends.length;j++){
                                             String outputkey = friends[i]+friends[j];
                                             context.write(new Text(outputkey),owner);
                                     }                                     
                             }
                   }
          }
          
          public static class FindReducer extends Reducer<Text,Text,Text,Text> {                          
                        public void reduce(Text key, Iterable<Text> values, 
                                        Context context) throws IOException, InterruptedException {
                                  String  commonfriends =""; 
                              for (Text val : values) {
                                  if(commonfriends == ""){
                                          commonfriends = val.toString();
                                  }else{
                                          commonfriends = commonfriends+":"+val.toString();
                                  }
                               }
                              context.write(key, new Text(commonfriends));                                
                        }                          
          }
          

        public static void main(String[] args) throws IOException,
        InterruptedException, ClassNotFoundException {
                
            Configuration conf = new Configuration();
            String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
            if (otherArgs.length < 2) {
              System.err.println("args error");
              System.exit(2);
            }
            Job job = new Job(conf, "word count");
            job.setJarByClass(FindFriend.class);
            job.setMapperClass(ChangeMapper.class);
            job.setCombinerClass(FindReducer.class);
            job.setReducerClass(FindReducer.class);
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(Text.class);
            for (int i = 0; i < otherArgs.length - 1; ++i) {
              FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
            }
            FileOutputFormat.setOutputPath(job,
              new Path(otherArgs[otherArgs.length - 1]));
            System.exit(job.waitForCompletion(true) ? 0 : 1);
                
        }

}





运行结果:

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

分享到:
评论

相关推荐

    大数据 76 道面试题及答案.docx

    * 解析性质程序:输出比输入多,例如找共同朋友。 HDFS 体系结构 HDFS 的体系结构包括: * Namenode:提供一个统一的目录结构对外提供一个具体的响应者。 * Datanode:负责存储数据块。 * Secondary Namenode:...

    十七道海量数据处理面试题与Bit-map详解

    ### 十七道海量数据处理面试题与Bit-map详解 #### 第一部分:十五道海量数据处理面试题 **题目一**:给定a、b两个文件,各存放50亿个URL,每个URL各占64字节,内存限制是4GB,让你找出a、b文件共同的URL。 - **...

    hadoop面试题大全

    本文将围绕"Hadoop面试题大全"这一主题,深入解析Hadoop的相关知识点,帮助你应对面试,提升专业技能。 1. **Hadoop概述** Hadoop是一个开源的分布式计算框架,由Apache基金会开发,主要用于处理和存储海量数据。...

    大数据面试题

    "大数据面试题" 大数据处理是当前IT行业最热门的技术之一,这篇文章收集了互联网上经典的大数据处理题目,对面试笔试非常有帮助。下面我们将对这些知识点进行详细的解释和分析。 1. Hadoop 安装步骤 Hadoop 是大...

    【BAT必备】分布式相关面试题大全面试题

    这篇文档“【BAT必备】分布式相关面试题大全面试题”显然是为了帮助求职者准备在这些公司面试时可能遇到的问题。以下是针对分布式系统的常见面试知识点的详细解析: 1. **分布式系统概念**:分布式系统是由多台...

    十道海量数据处理面试题(卷).doc

    海量数据处理面试题主要考察的是数据处理能力、算法理解、分布式计算原理以及高效存储策略。以下是对这些面试题的详细解答: 1. 提取出某日访问百度次数最多的 IP: 这题通常需要使用流式处理,如 MapReduce 或者 ...

    经典题目 IBM面试题

    【IBM面试题】是IT行业中一个重要的参考资源,它涵盖了各种技术领域,旨在考察候选人的技术深度、问题解决能力和逻辑思维。这些题目通常包括但不限于操作系统、数据结构、算法、网络、数据库、编程语言等多个方面的...

    大数据基础面试题hadoop,zookeeper,hbase,hive,spark,kafka,flink,clickhouse

    以上这些技术在大数据领域各司其职,共同构建了复杂的数据生态系统。面试时,通常会考察对这些工具的基本概念、工作原理、使用场景以及性能优化等方面的知识。例如,Hadoop 的数据块大小设置、Zookeeper 的会话超时...

    十道海量数据处理面试题与十个方法大总结

    海量数据处理面试题与十个方法大总结 海量数据处理是一种常见的数据处理方法,用于处理大量数据的存储、处理和分析。面试中,海量数据处理问题是常见的考察点,本文总结了十道海量数据处理面试题,并提供了相应的...

    大数据 80 道面试题及答案.docx

    大数据面试题及答案 本资源摘要信息涵盖了大数据领域中的多个知识点,涉及到HDFS、MapReduce等技术。 一、HDFS运行原理 HDFS(Hadoop Distributed File System)是一种分布式文件系统,运行原理可以分为以下几个...

    大数据技术之面试题.doc

    【大数据技术面试题解析】 大数据技术是现代信息技术领域的重要组成部分,尤其在处理大规模数据时,其价值不言而喻。本篇文章将详细解读Hadoop相关的面试题,帮助读者理解Hadoop及其生态系统的核心概念。 1. **...

    hadoop 面试题大全

    Hadoop面试题大全涵盖了从基础概念到高级应用的各个方面,对于准备Hadoop相关职位的面试者来说,这些知识点至关重要。首先,我们要理解Hadoop的基本架构和运行模式。 1. Hadoop集群的瓶颈通常在于磁盘I/O,这是大...

    十道海量数据处理面试题(卷).docx

    【海量数据处理面试题解析】 1. **提取访问次数最多的IP** 在处理海量日志数据时,我们通常需要对数据进行预处理和聚合。针对这个问题,可以使用MapReduce模型来解决。首先,通过Map阶段将日志中的IP与访问次数...

    SQL数据库对于海量数据面试题及答案.pdf

    "SQL数据库对于海量数据面试题及答案" 本文整理和大家分享一些SQL 数据库对于海量数据面试题及答案给大家,很不错哦,喜欢请收藏一下。 问题 1:找出 a、b 两个文件共同的url 给定 a、b 两个文件,各存放50 亿个 ...

    最新Hadoop的面试题总结

    【Hadoop面试题详解】 1. **Hadoop的运行模式** - 单机版:在本地单个节点上运行,用于开发和测试。 - 伪分布式模式:在一个节点上模拟多节点集群,所有Hadoop组件都在同一台机器上运行,但数据是分布存储的。 -...

    精选17道海量数量处理面试题!.pdf

    以下是基于给定的面试题解析的一些关键知识点: 1. **分治策略**: - 在第一题中,处理两个大文件(各50亿url)的共同元素问题,采用了分治的思想。通过哈希函数将url分散到多个小文件中,然后对比这些小文件寻找...

    大数据面试题(2).docx

    接着,通过构建哈希集合,遍历每个小文件对,找出存在于两个集合中的URL,即为共同的URL。如果允许一定误差,可以使用Bloom Filter,它可以在有限空间内标记大量元素是否存在,但可能存在误判。 2. 用户查询频率...

Global site tag (gtag.js) - Google Analytics