MR案例:Reduce-Join
问题描述:两种类型输入文件: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相关推荐
- 【MapReduce】基础案例 ---- Reduce Join 实现数据合并(表连接)
文章目录 一.Reduce Join ① Reduce Join工作原理 ② Reduce Join 案例 ☠ 需求 ☠ 案例分析 ☠ 代码实现 封装Bean对象 Mapper阶段 Reducer阶段 ...
- MR实现reduce join和map join及hive的执行计划
一.涵盖 MapReduce InputFormat RecordReader 切片:block=input split 1.1 File- Text- NLine- DB- Mapper setup ...
- Reduce Join介绍及案例
Reduce Join介绍及案例 Reduce Join介绍 Reduce Join案例 需求 1.需求说明 2.文件 案例分析 1.需求分析 2.输入数据 3.期望输出数据 4.MapTask 5. ...
- 大数据-[案例]Reduce端实现JOIN
7. [案例] Reduce 端实现 JOIN 7.1. 需求 假如数据量巨大,两表的数据是以文件的形式存储在 HDFS 中, 需要用 MapReduce 程 序来实现以下 SQL 查询运算 sele ...
- Map And Reduce Join的使用案例
文章目录 Reduce Join 1)需求 2)需求分析 3)编程实现 1.创建Bean类 2.创建Mapper类 3.创建Reducer类 4.创建Driver类 4)查看结果 5)总结 Mappe ...
- hadoop之mr案例
mr案例 (1)创建maven项目 (2)在po,.xml添加下面代码 <dependencies><dependency><groupId>junit</g ...
- reduce 数据倾斜_Spark(四十)数据倾斜解决方案之将reduce join转换
一.背景 1.将reduce join转换为map join 2.broadcast出来的普通变量 普通的join,那么肯定是要走shuffle:那么,所以既然是走shuffle,那么普通的join, ...
- MR案例:CombineFileInputFormat
CombineFileInputFormat是一个抽象类.Hadoop提供了两个实现类CombineTextInputFormat和CombineSequenceFileInputFormat. 此案 ...
- 大数据讲课笔记5.7 MR案例—TopN
文章目录 零.学习目标 一.导入新课 二.新课讲解 (一)案例分析 1.TopN分析法介绍 2.案例需求及分析 (二)案例实现 1.准备数据文件 (1)在虚拟机上创建文本文件 (2)上传文件到HDFS ...
最新文章
- centos7安装配置pgAgent
- 计算机计组成原理课后,计算机组成原理课后习题课(0001).doc
- 关于Swift4.0 Method Swizzling(iOS的hook机制)使用
- 学习《Hardware-Efficient Bilateral Filtering for Stereo Matching》一文笔记。
- 书评 - 《展望敏捷软件测试》
- juery-轮播图-原理与实现
- 为什么eolinker发送老是等待_eolinker之初体验
- Linux下VsFTP和ProFTP用户管理高级技巧 之一
- nginx/windows: nginx多虚拟主机配置
- linux运行关关采集器,杰奇远程采集教程linux下远程采集
- Power Apps 入门介绍
- 数字光电耦合器为汽车应用提供低功耗和高隔离
- [转]禅修程序员十诫
- 属性管理器没有Microsoft.Cpp.x64.user的解决办法
- (附源码)springboot菠萝大学课室预约系统分析与设 毕业设计 641656
- 微信发布Windows PC 测试版,支持电脑与手机互迁聊天记录
- 【机器学习】深度学习框架是什么?有哪些?如何选择?
- 细思极恐的“25号宇宙实验”的心理学启示:过于富足+缺乏边界=沉沦与毁灭?
- 中国有句俗语叫“三天打鱼两天晒网”。 某人从2010年1月1日起开始“三天打鱼两天晒网”, 问这个人在以后的某一天中是“打鱼”还是“晒网”
- 探究下疯狂动物城Zootopia为何如此高分的原因
热门文章
- CTFshow 命令执行 web51
- Bzoj 3122 随机数生成器
- hdu2973 YAPTCHA
- Codeforces Round #477 (rated, Div. 2, based on VK Cup 2018 Round 3)
- 4.6 matlab图形修饰处理(视点处理、色彩处理、裁剪处理)
- 1.9 matlab字符与字符串
- Python进阶06 循环对象与迭代
- Python爬取Json格式数据并读写(改中文编码)
- jupyter 安装目录Table of Contents
- Hadoop-2.4.1学习之edits和fsimage查看器