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
分享到:
相关推荐
* 解析性质程序:输出比输入多,例如找共同朋友。 HDFS 体系结构 HDFS 的体系结构包括: * Namenode:提供一个统一的目录结构对外提供一个具体的响应者。 * Datanode:负责存储数据块。 * Secondary Namenode:...
### 十七道海量数据处理面试题与Bit-map详解 #### 第一部分:十五道海量数据处理面试题 **题目一**:给定a、b两个文件,各存放50亿个URL,每个URL各占64字节,内存限制是4GB,让你找出a、b文件共同的URL。 - **...
本文将围绕"Hadoop面试题大全"这一主题,深入解析Hadoop的相关知识点,帮助你应对面试,提升专业技能。 1. **Hadoop概述** Hadoop是一个开源的分布式计算框架,由Apache基金会开发,主要用于处理和存储海量数据。...
"大数据面试题" 大数据处理是当前IT行业最热门的技术之一,这篇文章收集了互联网上经典的大数据处理题目,对面试笔试非常有帮助。下面我们将对这些知识点进行详细的解释和分析。 1. Hadoop 安装步骤 Hadoop 是大...
这篇文档“【BAT必备】分布式相关面试题大全面试题”显然是为了帮助求职者准备在这些公司面试时可能遇到的问题。以下是针对分布式系统的常见面试知识点的详细解析: 1. **分布式系统概念**:分布式系统是由多台...
海量数据处理面试题主要考察的是数据处理能力、算法理解、分布式计算原理以及高效存储策略。以下是对这些面试题的详细解答: 1. 提取出某日访问百度次数最多的 IP: 这题通常需要使用流式处理,如 MapReduce 或者 ...
【IBM面试题】是IT行业中一个重要的参考资源,它涵盖了各种技术领域,旨在考察候选人的技术深度、问题解决能力和逻辑思维。这些题目通常包括但不限于操作系统、数据结构、算法、网络、数据库、编程语言等多个方面的...
以上这些技术在大数据领域各司其职,共同构建了复杂的数据生态系统。面试时,通常会考察对这些工具的基本概念、工作原理、使用场景以及性能优化等方面的知识。例如,Hadoop 的数据块大小设置、Zookeeper 的会话超时...
海量数据处理面试题与十个方法大总结 海量数据处理是一种常见的数据处理方法,用于处理大量数据的存储、处理和分析。面试中,海量数据处理问题是常见的考察点,本文总结了十道海量数据处理面试题,并提供了相应的...
大数据面试题及答案 本资源摘要信息涵盖了大数据领域中的多个知识点,涉及到HDFS、MapReduce等技术。 一、HDFS运行原理 HDFS(Hadoop Distributed File System)是一种分布式文件系统,运行原理可以分为以下几个...
【大数据技术面试题解析】 大数据技术是现代信息技术领域的重要组成部分,尤其在处理大规模数据时,其价值不言而喻。本篇文章将详细解读Hadoop相关的面试题,帮助读者理解Hadoop及其生态系统的核心概念。 1. **...
Hadoop面试题大全涵盖了从基础概念到高级应用的各个方面,对于准备Hadoop相关职位的面试者来说,这些知识点至关重要。首先,我们要理解Hadoop的基本架构和运行模式。 1. Hadoop集群的瓶颈通常在于磁盘I/O,这是大...
【海量数据处理面试题解析】 1. **提取访问次数最多的IP** 在处理海量日志数据时,我们通常需要对数据进行预处理和聚合。针对这个问题,可以使用MapReduce模型来解决。首先,通过Map阶段将日志中的IP与访问次数...
"SQL数据库对于海量数据面试题及答案" 本文整理和大家分享一些SQL 数据库对于海量数据面试题及答案给大家,很不错哦,喜欢请收藏一下。 问题 1:找出 a、b 两个文件共同的url 给定 a、b 两个文件,各存放50 亿个 ...
【Hadoop面试题详解】 1. **Hadoop的运行模式** - 单机版:在本地单个节点上运行,用于开发和测试。 - 伪分布式模式:在一个节点上模拟多节点集群,所有Hadoop组件都在同一台机器上运行,但数据是分布存储的。 -...
以下是基于给定的面试题解析的一些关键知识点: 1. **分治策略**: - 在第一题中,处理两个大文件(各50亿url)的共同元素问题,采用了分治的思想。通过哈希函数将url分散到多个小文件中,然后对比这些小文件寻找...
接着,通过构建哈希集合,遍历每个小文件对,找出存在于两个集合中的URL,即为共同的URL。如果允许一定误差,可以使用Bloom Filter,它可以在有限空间内标记大量元素是否存在,但可能存在误判。 2. 用户查询频率...