目录
1.RDD弹性特征
- 存储的弹性:内存与磁盘的自动切换;
- 容错的弹性:数据丢失可以自动恢复;
- 计算的弹性:计算出错重试机制;
- 分片的弹性:可根据需要重新分片。
2.创建RDD的四种方式
- 从已有的数据集(集合)创建RDD
- 从外部数据源(如文件)创建RDD
- 对已有的RDD进行转换操作创建RDD
- 通过RDD之间的操作来创建RDD
3.RDD算子分为两种:转换型和行动型。
转换:功能的补充和封装,将旧的RDD包装成新的RDD。
行动:触发任务的调度和作业的执行。
4.RDD计算执行顺序
rdd的计算一个分区内的数据是依次执行逻辑的,只有前面的数据执行完全部逻辑后,才会执行下一个数据。一个分区内的数据的执行是有序的。不同分区的数据执行顺序是无序的。一个分区的情况:
val lineRdd = sc.makeRDD(List(1, 2, 3, 4),1) val rdd1 = lineRdd.map( num =>{ println("-----------------"+num) num } ) val rdd2 = rdd1.map( num =>{ println("++++++++++++++++++"+num) num } ) rdd2.collect() |
![]() |
2个分区的情况:
val lineRdd = sc.makeRDD(List(1, 2, 3, 4),2) val rdd1 = lineRdd.map( num =>{ println("-----------------"+num) num } ) val rdd2 = rdd1.map( num =>{ println("++++++++++++++++++"+num) num } ) rdd2.collect() |
![]() |
注解:分区为2的情况下,一个分区是1,2, 一个分区是3,4;对于一个分区来说,数据的执行是有序的,因此,1在2前面执行,3在4之前执行;但是不同分区的数据执行是无序的,因此1和3那个先执行是未知的。
5.私有云、公有云、社区云的区别
(1)私有云:
- 私有云是指由单个组织或企业独立拥有、管理和维护的云计算基础设施。
- 私有云通常部署在组织自己的数据中心或受信任的第三方数据中心,并且可以提供更高的数据安全和隐私控制。
(2)公有云:
- 公有云是由第三方云服务提供商(如亚马逊AWS、微软Azure、谷歌云平台等)提供的云计算基础设施和服务。
- 用户可以通过互联网访问公有云服务,按需购买计算能力、存储资源和其他服务,并且通常以按使用量付费。
(3)社区云:
- 社区云是一种云计算模式,针对特定行业、共同体或利益相关者群体而设置。
- 该模式允许不同组织共享云基础设施,并具有定制的特性以满足特定社区的需求,同时兼顾安全性、隐私性和合规性方面的考量。
6.云计算的特点
资源池化,弹性伸缩,安全可靠
7.转换算子
Map:
Zip:
sortBy:
val rdd = sc.makeRDD(List(("11", 2), ("1", 1), ("2", 3)), 2) val sortRDD: RDD[(String, Int)] = rdd.sortBy(t => t._1) sortRDD.collect().foreach(println) |
(1,1) (11,2) (2,3) |
val rdd = sc.makeRDD(List(("11", 2), ("1", 1), ("2", 3)), 2) val sortRDD: RDD[(String, Int)] = rdd.sortBy(t => t._1.toInt) sortRDD.collect().foreach(println) |
(1,1) (2,3) (11,2) |
groupByKey:
val rdd = sc.makeRDD(List(("a",1), ("a", 2),("a", 3),("b",1)),2) val groupRDD: RDD[(String, Iterable[Int])] = rdd.groupByKey() groupRDD.collect().foreach(println) |
(b,CompactBuffer(1)) (a,CompactBuffer(1, 2, 3)) |
reduceByKey;
val lineRdd: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4, 1 , 2, 3, 1), 2) val rdd1: RDD[(Int, Int)] = lineRdd.map((_, 1)) //(1,1), (2,1), (3,1), (4,1), (1,1), (2,1), (3,1), (1,1) val rdd2: RDD[(Int, Int)] = rdd1.reduceByKey((t1,t2)=>t1+t2) // val rdd2: RDD[(Int, Int)] = rdd1.reduceByKey(_+_) //(1,1), (1,1) , (1,1)=> (1,2), (1,1) => (1,3) |