问题描述:两种类型输入文件:address(地址)和company(公司)进行一对多的关联查询,得到地址名(例如:Beijing)与公司名(例如:Beijing JD、Beijing Red Star)的关联信息。可参考MR案例:Map-Join

1.map阶段:对比之前的单表关联可知,reduce阶段的key必须为关联两表的key,即address.Id = company.Id。则两表经过map处理输出的key必须是Id。

Class Map<LongWritable, Text, LongWritable, Text>{method map(){// 获取文件的每一行数据,并以":"分割String[] line = value.toString().split(":");//split对应的文件名String fileName = ((FileSplit) context.getInputSplit()).getPath().getName();//处理company文件的value信息:"Beijing Red Star:1"if (path.indexOf("company") >= 0){//<key,value> --<"1","company:Beijing Red Star">context.write(new LongWritable(line[1]), new Text("company" + ":" + line[0]));}//处理adress文件的value信息:"1:Beijing"else if (path.indexOf("address") >= 0){//<key,value> --<"1","address:Beijing">context.write(new LongWritable(line[0]), new Text("address" + ":" + line[1]));}}
}

2.reduce阶段:首先对输入<key, values>即<”1”,[“company:Beijing Red Star”,”company:Beijing JD”,”address:Beijing”]>的values值进行遍历获取到单元信息value(例如”company:Beijing Red Star”),然后根据value中的标识符(company和address)将公司名和地址名分别存入到company集合和address集合,最后对company集合和address集合进行笛卡尔积运算得到company与address的关系,并进行输出。

Class Reducer<LongWritable, Text, Text, Text>{method reduce(){//用来存储 company 和 address 的集合List<String> companys = new ArrayList<String>();List<String> addresses = new ArrayList<String>();for(Text text : v2s){            String[] result = text.toString().split(":");//以 company 开头的value存储到 company 集合中if(result[0].equals("company")){companys.add(result[1]);}//以 address 开头的value存储到 address 集合中else if(result[0].equals("address")){addresses.add(result[1]);}}        /**         * 如果只判断左表addresses.size()!=0;则转化为 左外连接 --> LEFT OUTER JOIN         * 如果只判断右表companys.size()!=0;则转化为 右外连接 --> RIGHT OUTER JOIN         * 左右都不判断,则转化为 全外连接 --> FULL OUTER JOIN         */        // 求笛卡尔积if(0 != companys.size()&& 0 != addresses.size()){for(int i=0;i<companys.size();i++){for(int j=0;j<addresses.size();j++){//<key,value>--<"Beijing JD","Beijing">context.write(new Text(companys.get(i)), new Text(addresses.get(j)));}}}}
} 

转载于:https://www.cnblogs.com/skyl/p/4746005.html

MR案例:Reduce-Join相关推荐

  1. 【MapReduce】基础案例 ---- Reduce Join 实现数据合并(表连接)

    文章目录 一.Reduce Join ① Reduce Join工作原理 ② Reduce Join 案例 ☠ 需求 ☠ 案例分析 ☠ 代码实现 封装Bean对象 Mapper阶段 Reducer阶段 ...

  2. MR实现reduce join和map join及hive的执行计划

    一.涵盖 MapReduce InputFormat RecordReader 切片:block=input split 1.1 File- Text- NLine- DB- Mapper setup ...

  3. Reduce Join介绍及案例

    Reduce Join介绍及案例 Reduce Join介绍 Reduce Join案例 需求 1.需求说明 2.文件 案例分析 1.需求分析 2.输入数据 3.期望输出数据 4.MapTask 5. ...

  4. 大数据-[案例]Reduce端实现JOIN

    7. [案例] Reduce 端实现 JOIN 7.1. 需求 假如数据量巨大,两表的数据是以文件的形式存储在 HDFS 中, 需要用 MapReduce 程 序来实现以下 SQL 查询运算 sele ...

  5. Map And Reduce Join的使用案例

    文章目录 Reduce Join 1)需求 2)需求分析 3)编程实现 1.创建Bean类 2.创建Mapper类 3.创建Reducer类 4.创建Driver类 4)查看结果 5)总结 Mappe ...

  6. hadoop之mr案例

    mr案例 (1)创建maven项目 (2)在po,.xml添加下面代码 <dependencies><dependency><groupId>junit</g ...

  7. reduce 数据倾斜_Spark(四十)数据倾斜解决方案之将reduce join转换

    一.背景 1.将reduce join转换为map join 2.broadcast出来的普通变量 普通的join,那么肯定是要走shuffle:那么,所以既然是走shuffle,那么普通的join, ...

  8. MR案例:CombineFileInputFormat

    CombineFileInputFormat是一个抽象类.Hadoop提供了两个实现类CombineTextInputFormat和CombineSequenceFileInputFormat. 此案 ...

  9. 大数据讲课笔记5.7 MR案例—TopN

    文章目录 零.学习目标 一.导入新课 二.新课讲解 (一)案例分析 1.TopN分析法介绍 2.案例需求及分析 (二)案例实现 1.准备数据文件 (1)在虚拟机上创建文本文件 (2)上传文件到HDFS ...

最新文章

  1. centos7安装配置pgAgent
  2. 计算机计组成原理课后,计算机组成原理课后习题课(0001).doc
  3. 关于Swift4.0 Method Swizzling(iOS的hook机制)使用
  4. 学习《Hardware-Efficient Bilateral Filtering for Stereo Matching》一文笔记。
  5. 书评 - 《展望敏捷软件测试》
  6. juery-轮播图-原理与实现
  7. 为什么eolinker发送老是等待_eolinker之初体验
  8. Linux下VsFTP和ProFTP用户管理高级技巧 之一
  9. nginx/windows: nginx多虚拟主机配置
  10. linux运行关关采集器,杰奇远程采集教程linux下远程采集
  11. Power Apps 入门介绍
  12. 数字光电耦合器为汽车应用提供低功耗和高隔离
  13. [转]禅修程序员十诫
  14. 属性管理器没有Microsoft.Cpp.x64.user的解决办法
  15. (附源码)springboot菠萝大学课室预约系统分析与设 毕业设计 641656
  16. 微信发布Windows PC 测试版,支持电脑与手机互迁聊天记录
  17. 【机器学习】深度学习框架是什么?有哪些?如何选择?
  18. 细思极恐的“25号宇宙实验”的心理学启示:过于富足+缺乏边界=沉沦与毁灭?
  19. 中国有句俗语叫“三天打鱼两天晒网”。 某人从2010年1月1日起开始“三天打鱼两天晒网”, 问这个人在以后的某一天中是“打鱼”还是“晒网”
  20. 探究下疯狂动物城Zootopia为何如此高分的原因

热门文章

  1. CTFshow 命令执行 web51
  2. Bzoj 3122 随机数生成器
  3. hdu2973 YAPTCHA
  4. Codeforces Round #477 (rated, Div. 2, based on VK Cup 2018 Round 3)
  5. 4.6 matlab图形修饰处理(视点处理、色彩处理、裁剪处理)
  6. 1.9 matlab字符与字符串
  7. Python进阶06 循环对象与迭代
  8. Python爬取Json格式数据并读写(改中文编码)
  9. jupyter 安装目录Table of Contents
  10. Hadoop-2.4.1学习之edits和fsimage查看器