题目描述:

现在有两个文件,1为存放公司名字和城市ID,2为存放城市ID和城市名
表一:
factoryname,addressed
Beijing Red Star,1
Shenzhen Thunder,3
Guangzhou Honda,2
Beijing Rising,1
Guangzhou Development Bank,2
Tencent,3
Back of Beijing,1
 
表2:
1,Beijing
2,Guangzhou
3,Shenzhen
4,Xian
 
现在要求输出公司名和城市名。例如:
Beijing Red Star Beijing
 
这个类似数据库里的多表连接。整体思路和单表连接差不多。还是利用reduce阶段对城市ID进行归并,我们在map阶段统一输出key=城市ID value=falg+“+”+城市名or公司名。然后通过reduce对flag的解析,分析后者是城市名还是公司名,并放到两个数组中,最后利用笛卡尔积将其输出
具体代码
public class MyMapper extends Mapper<LongWritable, Text, Text, Text> {
 
                 public void map(LongWritable ikey, Text ivalue, Context context )
                                                 throws IOException, InterruptedException {
                                String line=ivalue.toString();
                                StringTokenizer st= new StringTokenizer(line,"," );
                                String value0=st.nextToken();
                                String value1=st.nextToken();
                                 if(value0.compareTo("factoryname" )!=0){
                                                 if(value0.length()==1){
                                                                 context.write(new Text(value0), new Text("1" +"+"+value1));
                                                } else{
                                                                 context.write(new Text(value1), new Text("2" +"+"+value0));
                                                }
                                }
                }
 
}
 
 
public class MyReducer extends Reducer<Text, Text, Text, Text> {
 
                 public void reduce(Text _key, Iterable<Text> values, Context context)
                                                 throws IOException, InterruptedException {
                                 // process values
                                ArrayList<String> address= new ArrayList<String>();
                                ArrayList<String> factory= new ArrayList<String>();
                                 for (Text val : values) {
                                                String line=val.toString();
                                                StringTokenizer st=new StringTokenizer(line,"+" );
                                                 int flag=Integer.parseInt(st.nextToken());
                                                 if(flag==1){
                                                                String addressname=st.nextToken();
                                                                 address.add(addressname);
                                                                
                                                                
                                                } else if (flag==2){
                                                                String factoryname=st.nextToken();
                                                                factory.add(factoryname);
                                                }
                                }
                                 if(address.size()!=0&&factory.size()!=0){
                                                 for(int i=0;i<address.size();i++){
                                                                 for(int j=0;j<factory.size();j++){
                                                                                context.write( new Text(address.get(i)),new Text(factory.get(j)));
                                                                }
                                                }
                                }
                }
 
}

MapReduce 多表连接的更多相关文章

  1. MapReduce多表连接

    多表关联 多表关联和单表关联类似,它也是通过对原始数据进行一定的处理,从其中挖掘出关心的信息.下面进入这个实例. 1 实例描述 输入是两个文件,一个代表工厂表,包含工厂名列和地址编号列:另一个代表地址 ...

  2. Hadoop阅读笔记(三)——深入MapReduce排序和单表连接

    继上篇了解了使用MapReduce计算平均数以及去重后,我们再来一探MapReduce在排序以及单表关联上的处理方法.在MapReduce系列的第一篇就有说过,MapReduce不仅是一种分布式的计算 ...

  3. Hadoop-Map/Reduce之单表连接的实现

    MapReduce程序就是根据其特性对数据进行一个简单的逻辑处理,其中最为重要的一个特性就是根据key值将value值进行合并,其次就是在shuffle阶段有排序. 遇到一个MR程序就是要巧妙利用合并 ...

  4. SQL多表连接查询(详细实例)

    转载博客:joeleo博客(http://www.xker.com/page/e2012/0708/117368.html) 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:stud ...

  5. 关于Oracle表连接

    表连接注意left join on与where的区别: select * from dept; select * from emp; select * from emp a right outer j ...

  6. SQL多表连接查询

    SQL多表连接查询 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际 ...

  7. oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图

        多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所 ...

  8. Access数据库多表连接查询

    第一次在Access中写多表查询,就按照MS数据库中的写法,结果报语法错,原来Access的多表连接查询是不一样的 表A.B.C,A关联B,B关联C,均用ID键关联 一般写法:select * fro ...

  9. PostgreSQL-join多表连接查询和子查询

    一.多表连接查询 1.连接方式概览 [inner] join 内连接:表A和表B以元组为单位做一个笛卡尔积,记为表C,然后在C中挑选出满足符合on 语句后边的限制条件的内容. left [outer] ...

随机推荐

  1. icecap录屏gif

    百度云下载地址:http://pan.baidu.com/s/1jIeyb4q 之前写博客,只有文字,有些效果看不出来.有了这个gif录屏工具方便很多哦,嘿嘿

  2. List、Set、Map集合存放null解析及HashMap、Hashtable异同点解析

    1.List.Set.Map集合存放null解析: @Test public void CollectionTest() { // 测试List List<Object> list = n ...

  3. POJ 3292 Semi-prime H-numbers (素数筛法变形)

    题意:题目比较容易混淆,要搞清楚一点,这里面所有的定义都是在4×k+1(k>=0)这个封闭的集合而言的,不要跟我们常用的自然数集混淆. 题目要求我们计算 H-semi-primes, H-sem ...

  4. bootstrap's plugin:sthe usage of carousel

    if we want use the carousel.js,we need quote it in the page. sample code: <div id="myCarouse ...

  5. android 代码优化:封锁输出日志

    可以使用 ProGuard 完全地删除任何在发布版中无用的语句,关于 ProGuard 参见: http://developer.android.com/guide/developing/tools/ ...

  6. jquery 事件注册 与重复事件处理

    <!doctype html><html lang="us"><head><meta charset="utf-8"& ...

  7. 12C 连接方式和 Oracle Easy Connect Naming method

    1.12C 连接方式 PDB is not an instance, so using SID in the connection string will not work. When the dat ...

  8. gen_grant_dml.sql

    set echo off feedback off verify off pagesize 0 linesize 120 define v_grantee                = & ...

  9. 整理书本(book)

    整理书本(book) 题目描述 小A想把他满屋子的书整理一下.书本分成若干堆.每一堆的书本都有质量w和价值V.小A的任务是将所有书合成一堆.因为小A认为合并i,j两堆的书所需要的力为w[i]-v[i] ...

  10. 介绍Angular的注入服务

    其实angular的注入服务是挺复杂的,目前看源码也只看懂了一半,为了不误导大家,我也不讲敢讲太复杂,怕自己都理解错了. 首先我们要知道angular的三种注入方式: 第一种:inference va ...