Mapreduce《案例之两表连接》
数据源:
a.txt内容
addressed addressname
1 Beijing
2 Guangzhou
3 Shenzhen
4 Xian
b.txt内容
factoryname addressed
BeijingRedStar 1
ShenzhenThunder 3
GuangzhouHonda 2
BeijingRising 1
GuangzhouDevelopmentBank 2
Tencent 3
BackofBeijing 1
输出结果为:
factoryNameaddressName
BeijingRedStarBeijing
BeijingRisingBeijing
BackofBeijingBeijing
GuangzhouHondaGuangzhou
GuangzhouDevelopmentBankGuangzhou
ShenzhenThunderShenzhen
TencentShenzhen
========================================JAVA CODE============================
package gq;
import java.io.IOException;
import java.util.Iterator;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
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;
/**
*
* Class Description:案例之两表连接测试类
*
* Author:gaoqi
*
* Date:2015年6月5日 下午2:03:08
*
*/
public class LeftJoin {
public static int TIME = 0;
public static class Map extends Mapper<LongWritable, Text, Text, Text>{
public void map(LongWritable key,Text value,Context context) throws IOException, InterruptedException{
String line = value.toString();
if(line.contains("factoryname") || line.contains("addressed")){
return;
}
String[] ss = line.split(" ");
if(ss[0].charAt(0) >= '0' && ss[0].charAt(0)<='9'){//adressname table
context.write(new Text(ss[0]), new Text(1+"-"+ss[1]));
}else{//factoryname table
context.write(new Text(ss[1]), new Text(2+"-"+ss[0]));
}
}
}
public static class Reduce extends Reducer<Text, Text, Text, Text>{
public void reduce(Text key,Iterable<Text> values,Context context) throws IOException, InterruptedException{
if(0 == TIME){
context.write(new Text("factoryName"), new Text("addressName"));
TIME++;
}
Iterator<Text> its = values.iterator();
int anum =0;
int fnum = 0;
String[] aArray = new String[20];
String[] fArray = new String[20];
while(its.hasNext()){
String value = its.next().toString();
String[] ss = value.split("-");
if(ss[0].equals("1")){
aArray[anum] = ss[1];
anum++;
}else{
fArray[fnum] = ss[1];
fnum++;
}
}
if(anum != 0 && fnum !=0){
for(int m =0;m<fnum;m++){
for(int n=0;n<anum;n++){
context.write(new Text(fArray[m]), new Text(aArray[n]));
}
}
}
}
}
public static void main(String[] args) throws Exception{
Configuration conf = new Configuration();
Job job = new Job(conf,"LeftJoin");
job.setJarByClass(LeftJoin.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path("hdfs://h0:9000/user/tallqi/in/inputLeftjoin"));
FileOutputFormat.setOutputPath(job, new Path("hdfs://h0:9000/user/tallqi/in/outputLeftjoin"));
System.exit(job.waitForCompletion(true)?0:1);
}
}
相关推荐
### MapReduce综合应用案例——招聘数据清洗 #### 一、背景 随着互联网技术的迅猛发展,各类在线招聘平台成为连接求职者与企业的桥梁。这些平台不仅提供了海量的招聘信息,也为企业的人才选拔提供了便利。然而,在...
MapReduce的工作原理可以分为两个主要阶段:Map阶段和Reduce阶段。Map阶段将原始输入数据分割成多个小块,然后在各个节点上并行处理。每个节点上的Mapper函数接收键值对作为输入,进行一些预处理,如过滤、转换等,...
在这个案例中,作者提醒最后要加上`fs.close()`来确保文件系统的连接关闭,这是一个良好的编程实践,防止资源泄漏。 6. **标签相关性**:"hadoop"是指整个Hadoop生态系统,"MapRed"代表MapReduce框架,而"hdfs"是...
在大数据处理领域,HBase和MapReduce是两个不可或缺的重要组件。HBase作为分布式列式存储系统,适用于大规模数据的实时读写操作;而MapReduce则是Apache Hadoop的核心组件之一,用于处理和生成大数据集。当两者结合...
用户的手机,连接到不同的基站会产生一条记录。 数据格式为:用户标识 设备标识 基站位置 通讯的日期 通讯时间 example: 0000009999 0054785806 00000089 2016-02-21 21:55:37 需要得到的数据格式为: 用户...
总结一下,这个MapReduce案例展示了如何利用分布式计算处理大量数据,找到社交网络中用户之间的共同好友。通过Map阶段的拆分和Reducer阶段的聚合,我们可以高效地找出所有用户对之间的共同好友关系,这对于理解社交...
结合案例讲解mr重要知识点1.1 多表连接1.2 mr各组件之间数据传递1.3 mr中压缩设置1.4 多个job之间有序执行1.5 自定义outputFormat
在本案例中,“mapreduce统计度分布”是指使用MapReduce技术来实现一种特定的统计方法——度分布统计。 #### 二、背景与应用场景 **度分布统计**是图论中的一个重要概念,通常应用于社交网络分析、复杂网络研究等...
案例主要分为两个部分:第一部分是统计网站连续几日的独立访客数量(UV),第二部分是统计网站每日各个连接来源的流量。这些数据均来源于`access.log`文件,这是从Nginx服务器获取的日志文件。 #### 技术栈与工具 ...
- **Map-Side Join**:将连接操作放在Map阶段进行,适用于两个大表之间的连接。 - **内存支持连接**:利用内存缓存部分数据,以减少磁盘I/O操作。 ##### 3.6 总结 通过合理设计MapReduce算法,可以有效地处理各种...
探讨了如何设计有效的MapReduce算法,包括局部聚合、配对与条纹化、相对频率计算、二次排序、关系连接等技术。 - **第4章:用于文本检索的倒排索引** 讨论了如何构建和优化倒排索引,包括不同的实现方法和技术...
基于hadoop的Hive数据仓库JavaAPI简单调用的实例,关于Hive的简介在此不赘述。hive提供了三种用户接口:CLI,JDBC/ODBC和 WebUI CLI,即Shell命令行 ...这时候,你就可以通过Java代码来连接hiveserver,代码如下:
* 如何使用MapReduce连接两份文件的数据? * KNN算法单机版与MapReduce KNN相比,各自的优势是什么? * MapReduce KNN算法需要设置的参数有哪些? 拓展性问题: * 能否想到一个更加优化的方法实现MapReduce KNN? ...
通过WordCount案例,我们可以直观地理解MapReduce的工作流程。在这个例子中,Map阶段将文本文件中的每一行视为一个键值对,键为空字符串,值为整行内容。Mapper将每一行内容拆分成单词,每个单词成为新的键值对的键...
通过上述示例,我们可以看到MapReduce 在MongoDB中的强大之处,它不仅可以简化复杂的分组统计逻辑,还可以高效地处理大规模数据集。无论是通过Java API 还是在MongoDB命令行中直接编写JavaScript代码,MapReduce 都...
Hadoop是一个开源的分布式存储和处理框架,其核心组件之一的MapReduce为大规模数据集的并行处理提供了强大的支持。 在本书的预生产手稿中,提到了以下几点核心知识点: 1. MapReduce的基本概念:介绍了MapReduce的...
它的核心由两个主要部分组成:HDFS(Hadoop Distributed File System)和MapReduce。HDFS提供了高容错性的分布式文件系统,而MapReduce则是一种并行处理和计算模型,用于处理和生成大数据集。 接下来,Phoenix是...
MapReduce 分为两个主要阶段:Map 阶段和 Reduce 阶段。Map 阶段将输入数据分割成多个小块,然后对每个块进行并行处理。Reduce 阶段则将 Map 阶段的结果进行聚合,最终得到汇总结果。 1、项目结构与配置 在 Eclipse...
实现MapReduce链的方式主要有两种:手动编写多个MapReduce作业并控制其执行顺序,或者使用高级抽象框架(如Apache Pig、Hive等)自动处理多个MapReduce作业之间的依赖关系。 通过以上案例的学习,我们可以看到...