文章目录
前言
- 期末复习
- 主要包括云计算基本的概念
- 常见的pyspark算子于对应的例子
一、基本概念(云计算、RDD等)
1. 云计算的定义和优点
定义:云计算是一种通过互联网提供计算服务的技术。相比于传统计算,它的资源获取方式,从“买”变为“租”
优点:
- 资源池化
- 弹性伸缩
- 安全可靠
2.RDD定义和五大特性
定义 :RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。
五大特性:
- RDD由一系列的分区组成
- RDD的方法会作用在其所有的分区上
- RDD之间是有依赖关系(RDD有血缘关系)
- Key-Value型的RDD可以有分区器
- RDD的分区规划,会尽量靠近数据所在的服务器
3. 云计算部署类型(私有云/公有云/社区云/混合云之间的区别)
部署类型 | 私有云 | 公有云 | 社区云 | 混合云 |
---|---|---|---|---|
定义 | 由单一组织独享的云计算资源。 | 由第三方服务提供商提供的云计算资源,面向公众或多个租户。 | 由多个组织共同拥有和使用的云计算资源,通常有相似的需求和目标。 | 结合了私有云和公有云的优点,允许数据和应用在私有云和公有云之间进行迁移和交互。 |
优点 | 1. 安全; 2.自主可控。 |
1.成本低; 2.高扩展性; 3.便捷性。 |
1.成本共享; 2.安全性和隐私性; 3.协作。 |
1.灵活性; 2.成本效益; 3.高可用性。 |
缺点 | 1.成本高; 2.维护复杂; 3.扩展性有限。 |
1.安全性和隐私性; 2.控制权有限; 3.依赖性。 |
1. 复杂性; 2.扩展性受限; 3.合规性问题。 |
1. 管理复杂; 2.安全挑战; 3.集成难度。 |
4. 云计算服务类型
Infrastructure as a Service(IaaS):基础设备即服务
Platform as a Service(PaaS):平台即服务
Software as a Service(SaaS):软件即服务
二、常见RDD算子及例子
分布式集合对象上的API称之为算子
Python中使用pyspark初始化
from pyspark import SparkConf,SparkContext
if __name__ == '__main__':
//构建SparkConf对象
conf = SparkConf().setAppName('helloworld').setMaster('local[*]')
//构建SparkContext执行环境入口对象
sc = SparkContext(conf = conf)
1. Transformation算子:行动算子
1)map算子和flatMap算子的区别和联系
map:是将RDD的数据一条条处理,返回新的RDD
- 一对一映射。
- 返回一个新的RDD,其中的每个元素是通过函数转换得到的单个元素。
- 适用于输入和输出元素之间存在一对一关系的情况。
data = [1, 2, 3, 4, 5]
rdd = sc.parallelize(data)
#使用map 算子将每个元素乘以 2
mapped_rdd = rdd.map(lambda x: x * 2)
print(mapped_rdd.collect())
#输出: [2, 4, 6, 8, 10]
flatMap: 对rdd执行map操作,然后进行解除嵌套操作
- 一对多映射。
- 返回一个新的RDD,其中每个输入元素可以被映射为0个或多个输出元素。最终结果是扁平化的。
- 适用于输入元素需要映射为多个输出元素的情况,例如将句子拆分为单词。
data = ["hello world", "apache spark"]
rdd = sc.parallelize(data)
// 使用 flatMap 算子将每个字符串拆分为单词
flat_mapped_rdd = rdd.flatMap(lambda x: x.split(" "))
print(flat_mapped_rdd.collect())
// 输出: ['hello', 'world', 'apache', 'spark']
2)sortBy算子和sortByKey算子的联系区别
sortBy和sortByKey算子都是用于对RDD进行排序的
sortBy
- 可以对任意类型的RDD进行排序
- 需要指定一个函数,该函数从RDD的元素中提取排序键
data = [("Alice", 23), ("Bob", 20), ("Charlie", 25)]
rdd = sc.parallelize(data)
//按年龄排序
sorted_rdd = rdd.sortBy(lambda x: x[1])
print(sorted_rdd.collect())
//输出: [('Bob', 20), ('Alice', 23), ('Charlie', 25)]
sortByKey
- 仅适用于键值对形式的RDD
- 根据键值对进行排序
data = [("Alice", 23), ("Bob", 20), ("Charlie", 25)]
rdd = sc.parallelize(data)
//按名字排序
sorted_rdd = rdd.sortByKey()
print(sorted_rdd.collect())
//输出: [('Alice', 23), ('Bob', 20), ('Charlie', 25)]
rdd = sc.parallelize([('a', 1), ('E', 1), ('C', 1), ('D', 1), ('b', 1), ('g', 1), ('f', 1)], 3)
// 默认按照key进行升序排序
print("默认: ",rdd.sortByKey()