开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:Spark 原理_逻辑图_窄依赖_案例】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/12014
Spark 原理_逻辑图_窄依赖_案例
内容简介
一、RDD 之间有那些依赖关系
二、窄依赖案例
我们已经学习了 rdd 之间的关系,探讨的是分区之间的关系,那么了解了分区之间就是一对一、多对一的关系,接下来会对这些内容做更详细的说明。
一、RDD 之间有那些依赖关系
1. 前置说明 //rdd 之间的关系有那些种
(1)一对一关系
(2)多对一关系
为什么一对一、多对一是前置说明,因为关系是一个相对的概念,例如夫妻之间是没有血缘关系的,但是从人伦的关系上来看,夫妻之间又是最亲近的关系。所以看待关系的视角不同,得到的结论也不同。
2. 下结论之前,探讨 spark 中为什么要在 RDD 之间划分关系原因:想要看看 RDD 的分区是否能放在同一个流水线上执行,这就是要为 rdd 之间划分关系的根本原因。
//依赖关系有两种,如下:
(1).窄依赖
(2).宽依赖
通过学习了解 rdd 之间的关系是什么,什么是窄依赖,窄依赖的作用
二、窄依赖
案例
1.进入代码,编写内容如下:
@test
Def narrowdependency():unit ={
//需求:求得两个 RDD 之间的笛卡尔积
步骤
//1.生成 RDD
val conf = new sparkconf
().setmaster(“local[6]”).setAPPName(“cartesian”)
Val sc = new SparkContext(conf)
Val rdd1 = sc.parallelize(seq(1,2,3,4,5,6,))
Val rdd2 = sc.parallelize(seq(
“a”,”b”,”c”))
//2.计算
Val resultRDD = rdd1.cortesian(rdd2)
//cortesian 算子是生成笛卡尔积的算子,通过一个算子就可以求得 rdd1 和 rdd2 两个笛卡尔积
//3.结果获取
ResultRDD.collect().foreach(println(_))
Sc.stop()
}
2.运行结果如图:
...
Rdd1和 rdd2会生成的笛卡尔积,笛卡尔积中包含什么数据?
1a 1b 1c
2a 2b 2c
3a 3b 3c
4a 4b 4c......
这两个数据中所有数字全部连结
六个数量的数据集和三个数量的数据集,生成的笛卡尔积
在这里笛卡尔积中的结果数量为18个
//编写整个笛卡尔积的目的是为了了解什么是窄依赖.