`

Mapreduce《案例之两表连接》

阅读更多

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综合应用案例 - 招聘数据清洗.docx

    ### MapReduce综合应用案例——招聘数据清洗 #### 一、背景 随着互联网技术的迅猛发展,各类在线招聘平台成为连接求职者与企业的桥梁。这些平台不仅提供了海量的招聘信息,也为企业的人才选拔提供了便利。然而,在...

    细细品味Hadoop_Hadoop集群(第9期)_MapReduce初级案例

    MapReduce的工作原理可以分为两个主要阶段:Map阶段和Reduce阶段。Map阶段将原始输入数据分割成多个小块,然后在各个节点上并行处理。每个节点上的Mapper函数接收键值对作为输入,进行一些预处理,如过滤、转换等,...

    MapReduce开发案例

    在这个案例中,作者提醒最后要加上`fs.close()`来确保文件系统的连接关闭,这是一个良好的编程实践,防止资源泄漏。 6. **标签相关性**:"hadoop"是指整个Hadoop生态系统,"MapRed"代表MapReduce框架,而"hdfs"是...

    HBase MapReduce完整实例

    在大数据处理领域,HBase和MapReduce是两个不可或缺的重要组件。HBase作为分布式列式存储系统,适用于大规模数据的实时读写操作;而MapReduce则是Apache Hadoop的核心组件之一,用于处理和生成大数据集。当两者结合...

    hadoop MapReduce案例运营商关于用户基站停留数据统计

    用户的手机,连接到不同的基站会产生一条记录。 数据格式为:用户标识 设备标识 基站位置 通讯的日期 通讯时间 example: 0000009999 0054785806 00000089 2016-02-21 21:55:37 需要得到的数据格式为: 用户...

    大数据学习(八):mapreduce编程案例-求两人之间的共同好友

    总结一下,这个MapReduce案例展示了如何利用分布式计算处理大量数据,找到社交网络中用户之间的共同好友。通过Map阶段的拆分和Reducer阶段的聚合,我们可以高效地找出所有用户对之间的共同好友关系,这对于理解社交...

    mapreduce高级特性3

    结合案例讲解mr重要知识点1.1 多表连接1.2 mr各组件之间数据传递1.3 mr中压缩设置1.4 多个job之间有序执行1.5 自定义outputFormat

    mapreduce统计度分布

    在本案例中,“mapreduce统计度分布”是指使用MapReduce技术来实现一种特定的统计方法——度分布统计。 #### 二、背景与应用场景 **度分布统计**是图论中的一个重要概念,通常应用于社交网络分析、复杂网络研究等...

    java大数据案例_5Mapreduce、数据挖掘

    案例主要分为两个部分:第一部分是统计网站连续几日的独立访客数量(UV),第二部分是统计网站每日各个连接来源的流量。这些数据均来源于`access.log`文件,这是从Nginx服务器获取的日志文件。 #### 技术栈与工具 ...

    Data-Intensive Text Processing with MapReduce

    - **Map-Side Join**:将连接操作放在Map阶段进行,适用于两个大表之间的连接。 - **内存支持连接**:利用内存缓存部分数据,以减少磁盘I/O操作。 ##### 3.6 总结 通过合理设计MapReduce算法,可以有效地处理各种...

    云计算 mapreduce - <Data-Intensive[1].Text.Processing.With.MapReduce>

    探讨了如何设计有效的MapReduce算法,包括局部聚合、配对与条纹化、相对频率计算、二次排序、关系连接等技术。 - **第4章:用于文本检索的倒排索引** 讨论了如何构建和优化倒排索引,包括不同的实现方法和技术...

    hadoop+hive+mapreduce的java例子

    基于hadoop的Hive数据仓库JavaAPI简单调用的实例,关于Hive的简介在此不赘述。hive提供了三种用户接口:CLI,JDBC/ODBC和 WebUI CLI,即Shell命令行 ...这时候,你就可以通过Java代码来连接hiveserver,代码如下:

    Hadoop大数据开发基础教案-项目案例:电影网站用户性别预测教案.pdf

    * 如何使用MapReduce连接两份文件的数据? * KNN算法单机版与MapReduce KNN相比,各自的优势是什么? * MapReduce KNN算法需要设置的参数有哪些? 拓展性问题: * 能否想到一个更加优化的方法实现MapReduce KNN? ...

    MapReduce.docx

    通过WordCount案例,我们可以直观地理解MapReduce的工作流程。在这个例子中,Map阶段将文本文件中的每一行视为一个键值对,键为空字符串,值为整行内容。Mapper将每一行内容拆分成单词,每个单词成为新的键值对的键...

    mongo group by mapreduce操作

    通过上述示例,我们可以看到MapReduce 在MongoDB中的强大之处,它不仅可以简化复杂的分组统计逻辑,还可以高效地处理大规模数据集。无论是通过Java API 还是在MongoDB命令行中直接编写JavaScript代码,MapReduce 都...

    《MapReduce数据密集型文本处理》.pdf

    Hadoop是一个开源的分布式存储和处理框架,其核心组件之一的MapReduce为大规模数据集的并行处理提供了强大的支持。 在本书的预生产手稿中,提到了以下几点核心知识点: 1. MapReduce的基本概念:介绍了MapReduce的...

    phoenix_wordcount.tar.gz_Hadoop Phoenix_mapReduce_phoenix wordc

    它的核心由两个主要部分组成:HDFS(Hadoop Distributed File System)和MapReduce。HDFS提供了高容错性的分布式文件系统,而MapReduce则是一种并行处理和计算模型,用于处理和生成大数据集。 接下来,Phoenix是...

    hadoop中 MapReduce学习代码WordCount

    MapReduce 分为两个主要阶段:Map 阶段和 Reduce 阶段。Map 阶段将输入数据分割成多个小块,然后对每个块进行并行处理。Reduce 阶段则将 Map 阶段的结果进行聚合,最终得到汇总结果。 1、项目结构与配置 在 Eclipse...

    java大数据内容_5Mapreduce、数据挖掘

    实现MapReduce链的方式主要有两种:手动编写多个MapReduce作业并控制其执行顺序,或者使用高级抽象框架(如Apache Pig、Hive等)自动处理多个MapReduce作业之间的依赖关系。 通过以上案例的学习,我们可以看到...

Global site tag (gtag.js) - Google Analytics