自用 云计算 | pyspark | 常见RDD算子及例子(云计算期末)


前言

  1. 期末复习
  2. 主要包括云计算基本的概念
  3. 常见的pyspark算子于对应的例子

一、基本概念(云计算、RDD等)

1. 云计算的定义和优点

定义:云计算是一种通过互联网提供计算服务的技术。相比于传统计算,它的资源获取方式,从“买”变为“租”

优点:

  1. 资源池化
  2. 弹性伸缩
  3. 安全可靠

2.RDD定义和五大特性

定义 :RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。

五大特性:

  1. RDD由一系列的分区组成
  2. RDD的方法会作用在其所有的分区上
  3. RDD之间是有依赖关系(RDD有血缘关系)
  4. Key-Value型的RDD可以有分区器
  5. 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

  1. 一对一映射。
  2. 返回一个新的RDD,其中的每个元素是通过函数转换得到的单个元素。
  3. 适用于输入和输出元素之间存在一对一关系的情况。
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操作,然后进行解除嵌套操作

  1. 一对多映射。
  2. 返回一个新的RDD,其中每个输入元素可以被映射为0个或多个输出元素。最终结果是扁平化的。
  3. 适用于输入元素需要映射为多个输出元素的情况,例如将句子拆分为单词。
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

  1. 可以对任意类型的RDD进行排序
  2. 需要指定一个函数,该函数从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

  1. 仅适用于键值对形式的RDD
  2. 根据键值对进行排序
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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值