MapReduce之单表关联Join输出祖父母、孙子---(附例子)

2023-05-16

需求:一个文件,有子女和对应的父母,要求输出 祖父母  孙子,
文件如下:

单表关联                        结果:
child        parent            grand	child
Tom        Lucy                Alice	Tom
Tom        Jack                Jesse	Tom
Jone        Lucy               Alice	Jone
Jone        Jack               Jesse	Jone
Lucy        Mary               Ben  	Tom
Lucy        Ben                Mary 	Tom
Jack        Alice              Ben	    Jone
Jack        Jesse              Mary	    Jone
Terry        Alice             Alice  	Philip
Terry        Jesse             Jesse	Philip
Philip       Terry             Alice	Mark
Philip       Alma             Jesse 	Mark
Mark       Terry
Mark       Alma

1.Mapper.class

public class SingleMapper  extends Mapper<LongWritable,Text,Text,Text>{
	@Override
	protected void map(LongWritable key, Text value, Context context)
			throws IOException, InterruptedException {
     String line=value.toString();
     if(line.contains("child ")| line.contains("parent")){
		 return ;
	 }
    // String[] _str=line.split("\t"); //会报数组越界
     StringTokenizer _str=new StringTokenizer(line);
    while(_str.hasMoreTokens()){
    	String child=_str.nextToken();
    	String parent=_str.nextToken();
    	context.write(new Text(parent),new Text("1,"+child));//1 儿子 :父母儿子
        context.write(new Text(child),new Text("0,"+parent));//0  祖父  :父母 祖父
    }
  }
}

2.Reducer.class

public class SingleReduce extends Reducer<Text, Text, Text, Text> {
	
	@Override
	protected void setup(Context context)
			throws IOException, InterruptedException {
		 context.write(new Text("grand"), new Text("child"));
	} //只执行一次
	@Override
	protected void reduce(Text key, Iterable<Text> values, Context context)
			throws IOException, InterruptedException {
		 ArrayList<String> left=new ArrayList<String>();
		 ArrayList<String> right=new ArrayList<String>();
		 for(Text v:values){
				if(v.toString().contains("1")){
					left.add(v.toString().split(",")[1]);//孙子
				}else{
					right.add(v.toString().split(",")[1]);//祖父母
				}
			}//对相同的key
			for(int i=0;i<left.size();i++){ //相当于笛卡儿积
				for(int j=0;j<right.size();j++){
					context.write(new Text(right.get(j)), new Text(left.get(i)));
				}		 
			}
	}
}

3.Driver.class

public class SingleDriver {
	public static void main(String[] args) throws IllegalArgumentException, IOException, ClassNotFoundException, InterruptedException, URISyntaxException {
		Configuration conf = new Configuration();
		 
		 Path outfile = new Path("file:///D:/输出结果/singleout");
		FileSystem fs = outfile.getFileSystem(conf);
		if(fs.exists(outfile)){
			fs.delete(outfile,true);
		}
		Job job = Job.getInstance(conf);
		job.setJarByClass(SingleDriver.class);
		job.setJobName("Sencondary Sort");
		job.setMapperClass(SingleMapper.class);  
	    job.setReducerClass(SingleReduce.class);
	 
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(Text.class);
		 
		FileInputFormat.addInputPath(job, new Path("file:///D:/测试数据/单表关联.txt/"));
		FileOutputFormat.setOutputPath(job,outfile);
		
		System.exit(job.waitForCompletion(true)?0:1);
	}
}

 
总结:join解决表关联查询的时候,特别要锁定标识位,通常作为key,去比较筛选所得的value,最后context.write(),写出.






 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MapReduce之单表关联Join输出祖父母、孙子---(附例子) 的相关文章

  • mysql JOIN,这是如何解释的?

    如果我为 mysql 编写一条 sql 查询 并且只指定 JOIN 没有外连接 内连接 左连接等 那么默认的连接类型是什么 例如 SELECT count FROM Students p JOIN 班级 c ON p studentId c
  • MongoDB:在没有并行性的情况下使用 MapReduce 有什么意义?

    Quoting http www mongodb org display DOCS MapReduce MapReduce Parallelism http www mongodb org display DOCS MapReduce Ma
  • 在 R 中连接/匹配数据帧

    我有两个数据框 第一列有两列 x是水深 y是每个深度的温度 第二个也有两列 x也是水深 但与第一个表中的深度不同 第二栏z是盐度 我想通过以下方式连接两个表x 通过增加z到第一张桌子 我已经学会了如何使用 key 来连接表tidyr 但只有
  • 连接后带有 Less/Greater 的Where 子句

    我正在尝试结合一个joins with a where条款 但where子句不是测试相等 而是测试大于或等于 我知道在标准 where 子句中 我可以这样做 Group where vote deadline at lt Time now
  • MS Access 不支持连接表达式吗?

    谁能向我解释我的查询有什么问题吗 SELECT T2 TIPOPRODUTO T2 PRODUTO T1 ESPESSURA AS LARGURA AS COMPRIMENTO AS ACABAM REVEST AS ESPECIF QUA
  • 非等值连接一步添加 data.table 中范围表的所有列

    我确信我忽略了显而易见的事情 但我找不到一种方法来连接 查找 表的所有列data table非等值连接一步到位 我看了阿伦的演讲 https github com Rdatatable data table wiki talks ArunS
  • 通过非 sf 列内连接两个 sf 对象

    我尝试使用内连接或左连接连接两个 sf 数据帧 这些数据框内部都有几何列 我不断收到错误 check join x y 中的错误 y 应该是一个数据框 对于空间连接 请使用 st joinFALSE 下面的可重现示例 df1 lt data
  • MYSQL嵌套查询运行速度很慢?

    以下查询不断超时 是否有开销更少的方法来实现相同的功能 UPDATE Invoices SET ispaid 0 WHERE Invoice number IN SELECT invoice number FROM payment allo
  • MySQL 连接逗号分隔字段

    我有两张桌子 第一个表是batch在字段 batch 中包含逗号分隔的学生 ID 的表 batch id batch 1 1 2 2 3 4 第二个表是分数 marks id studentid subject marks 1 1 Engl
  • 动态/条件 SQL 连接?

    我在 MSSQL 表 TableB 中有数据 其中 dbo tableB myColumn 在特定日期后更改格式 我正在做一个简单的连接到该表 Select dbo tableB theColumnINeed from dbo tableA
  • mongodb - 检索数组子集

    看似简单的任务对我来说是一个挑战 我有以下 mongodb 结构 services TCP80 data status 1 delay 3 87 ts 1308056460 status 1 delay 2 83 ts 1308058080
  • 多个数据库连接

    我有三张桌子 categories content info and content The categories表包含类别的id及其 IDparent类别 The content info包含两列 entry id帖子的 ID 和cat
  • R data.table 多个条件连接

    我设计了一种解决方案 用于从两个单独数据表的多个列中查找值 并添加基于新列的值计算 多个条件比较 代码如下 它涉及在计算两个表中的值时使用 data table 和联接 但是 这些表没有联接在我正在比较的列上 因此我怀疑我可能无法获得 da
  • 运行时异常:java.lang.NoSuchMethodException:tfidf$Reduce.()

    如何解决这个问题 tfidf是我的主类 为什么运行jar文件后会出现这个错误 java lang RuntimeException java lang NoSuchMethodException tfidf Reduce
  • 3 个表的 SQL 查询(或联接)

    第一次在 Stack Overflow 上问问题 很棒的资源 但是只有一件事真正让我作为 SQL 新手感到困惑 我有三个表 我想获取与鲍勃的学生相关的所有导师的姓名 表 1 教师 ID Name 1 Bob 表 2 学生 STUDENT I
  • MySQL 左连接 WHERE table2.field = "X"

    我有以下表格 pages Field Type Null Key Default Extra page id int 11 NO PRI NULL auto increment type varchar 20 NO NULL
  • Sqoop - 绑定到 YARN 队列

    因此 使用 MapReduce v2 您可以使用绑定到某些 YARN 队列来管理资源和优先级 基本上通过使用 hadoop jar xyz jar D mapreduce job queuename QUEUE1 input output
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3
  • 具有条件连接和非匿名返回的 LINQ 查询

    我有一个针对 SQL Server 数据库的 LINQ 查询 该查询将每行的数据写入一个对象Person 在某些情况下 我想加入其他表并添加更多字段Person对象 同时利用 LINQ 延迟加载 The Person类看起来像这样 publ
  • 如何在data.table中使用OR条件连接表

    在 data table 中是否可以使用 OR 条件连接表 例如 library data table X lt data table x c a b c d e f y c 1 1 2 2 3 3 z c 10 11 12 13 14 1

随机推荐

  • Qt中的QWidget::move函数

    QWidget move函数 原型 xff1a void move int x int y void move const QPoint amp 其中move的原点是父窗口的左上角 xff0c 如果没有父窗口 xff0c 则桌面即为父窗口
  • 欧拉角和万向节死锁

    一 什么是欧拉角 欧拉角就是物体绕坐标系三个坐标轴 xff08 x xff0c y xff0c z轴 xff09 的旋转角度 xff0c 在这里坐标系可以是世界坐标系 xff0c 也可以是物体坐标系 xff0c 旋转顺序也是任意的 xff0
  • 【freeRTOS内存管理策略详解】

    内存管理对应用程序和操作系统来说都非常重要 现在很多的程序漏洞和运行崩溃都和内存分配使用错误有关 FreeRTOS操作系统将内核与内存管理分开实现 xff0c 操作系统内核仅规定了必要的内存管理函数原型 xff0c 而不关心这些内存管理函数
  • NGFF、M.2、PCIe、NVMe概念区分以及PCIEx1 x4 x8 x16区别

    对于NGFF M 2 PCIe NVMe等概念的说明 解决方案 NGFF Next Generation Form Factor xff0c 顾名思义 xff0c 是物理外形 Form Factor 的标准 与 NGFF 并列的是 2 5
  • 二重积分和雅可比行列式

    我们以二重积分为例进行说明 xff0c 首先说结论 xff1a 一 结论 若x 61 x u v y 61 y u v 存在偏导数 xff0c 则二阶雅可比行列式为 61 61 dxdy 61 J2 dudv J2的绝对值 且 其中积分区域
  • 雅可比行列式和雅可比矩阵

    接触雅可比行列式是在二重积分的变量变换中 xff0c 参见我的另一篇文章https blog csdn net xiaoyink article details 88432372 下面我们来详细说明一下雅可比行列式和雅可比矩阵 雅可比矩阵
  • jlink-v8 固件修复

    一 先说 jlink v8 v9 v10区别 v8基本价格在40左右 xff0c 芯片是atml的 xff0c 但是很多反应是掉固件和提示盗版问题 v9现在主流 xff0c 盗版价100左右 xff0c 主控芯片stm32 做的比较成熟 x
  • kubernetes学习-快速上手速查手册

    目录 使用k3s快速搭建k8s安装k8s dashboard使用Helm部署K8S资源k8s核心命令一切推倒重来资源创建方式NamespacePodDeploymentServiceIngress解决官网Ingress安装不了问题使用方式
  • 作为一个4年程序员至少需要掌握的专业技能

    一名3年工作经验的程序员应该具备的技能 xff0c 在机缘巧合之中 xff0c 看了这篇博客 感觉自己真的是很差 xff0c 一直想着会写if else 就已经是一名程序员了 xff0c 在工作之余也很少学习 于是 xff0c 自己的cod
  • C语言与C++的区别

    一 C 43 43 简介 本贾尼 斯特劳斯特鲁普 于1979年4月在贝尔实验室负责分析UNIX系统的内核的流量情况 于1979年10月开始着手开发一种新的编程语言 在C语言的基础上增加了面向对象机制 这就是C 43 43 的来历 在1983
  • 我的2011-当梦想照进现实

    我的2011年 xff0c 之所以是现在的样子 xff0c 始缘于我三年前的一个决定 离职考研 对于工作了两年的我来说 xff0c 离职考研是人生的一场博弈 我的2011年 xff0c 结束了研究生期间对三维骨骼动画渲染的相关研究 xff0
  • Dockerfile RUN 同时执行多条命令

    Dockerfile RUN 同时执行多条命令 Dokcerfile中的命令每执行一条即产生一个新的镜像 xff0c 当前命令总是在最新的镜像上执行 如下Dockerfile xff1a RUN span class hljs built
  • HC-SR04超声波模块使用记录

    文章目录 HC SR04超声波模块使用记录轮询测量方式一 模块使用中的问题二 应对方法三 注意 分时测量利用输入捕获测量利用输入捕获测量 HC SR04超声波模块使用记录 具体使用方法见HC SR04使用手册 xff0c 本文重点记录该模块
  • 【C语言冒泡排序、选择排序和快速排序】

    文章目录 前言一 冒泡排序二 选择排序三 快速排序四 代码设计与实现代码设计代码实现 调试结果冒泡排序改良 延伸思考总结 前言 本文简单介绍了C语言的冒泡排序 选择排序 快速排序 xff0c 结合本人的理解与使用做一下记录 一 冒泡排序 思
  • 平衡车制作---原理篇

    平衡车制作 原理篇 文章目录 平衡车制作 原理篇前言直立控制直观感受内部机理 速度控制方向控制总结 前言 本篇教程内容主要来自于 直立平衡车模参考设计方案 xff0c 且这里是从概念层面讲述的并没有具体的控制理论方面的内容 有了这些概念方面
  • FreeRTOS使用注意

    FreeRTOS使用注意 xff1a 中断中必须使用带FromISR结尾的API函数只有中断优先级处于FreeRTOS可管理的范围内时 xff0c 才能使用FreeRTOS提供的API函数中断中不要使用FreeRTOS提供的内存申请和释放函
  • 现代控制理论基础总结

    现代控制理论基础总结 xff08 线性部分 xff09 学习现代控制理论也有两个月的时间了 xff0c 里面涉及的基础内容和公式十分之多 xff0c 所以现在对各部分基础知识作一个总结 1 控制系统的状态表达式 在现代控制理论中 xff0c
  • 题库(关于c++的网站都盘了)大盘点(好多没盘到)

    1 keda ac 2 hydro ac 3 luogu com cn 4 cplusplus com 5 leetcode cn 6 https loj ac 7 noi cn 8 ybt ssoier cn 8088 9 learncp
  • 利用MapReduce进行二次排序--附例子

    首先先来明确几个概念 xff1a 1 分区 partition 1 xff09 分区 xff08 partition xff09 xff1a 默认采取散列值进行分区 xff0c 但此方法容易造成 数据倾斜 xff08 大部分数据分到同一个r
  • MapReduce之单表关联Join输出祖父母、孙子---(附例子)

    需求 xff1a 一个文件 xff0c 有子女和对应的父母 xff0c 要求输出 祖父母 孙子 xff0c 文件如下 xff1a 单表关联 结果 xff1a child parent grand child Tom Lucy Alice T