Spark RDD (一)

介绍Apache Spark核心组件RDD的基本原理与特性,包括创建方法、数据结构特点及其在集群环境下的运行机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. RDD基本原理

弹性式分布数据集RDD是Apache Spark的核心,它是一组不可变的JVM(java virtual machine)对象的分布集,可以执行高速运算。该数据集是分布式的,基于某种关键字该数据集被划分成若干块,并且分发到执行器节点,这样使得数据集能够高速执行运算。并且RDD对于每个块所做的所有转换都跟踪记录到日志中,在发生错误或者部分数据丢失时可以回退并重新进行计算,所以RDD也可以防止数据丢失。

2. 创建RDD

在pyspark中有两种方法创建RDD
(1). 可以使用.parallelize(…)集合,元素可以是list, array

data = sc.parallelize([('Amber', 22), ('Alfred', 23), ('Skye', 4), ('Albert', 12), ('Amber', 9)])

(2). 可以引用本地或外部的文件

data_from_file = sc.textFile('/Users/huoshirui/Desktop/VS14MORT.txt.gz', 4)

其中sc.textFile()方法中最后一个参数代表该数据集被划分的分区个数,经验法则是把每一个集群中的数据集划分为2到4个分区。
从文件中读取的数据表示为MapPartitionsRDD,而不使用.paralellize(…)方法对一个集合进行操作的ParallelCollectionRDD.
RDD是无schema的数据结构,我们可以混合使用任何类型的数据结构:tuple, dict, list和Spark都能支持。

data_heterogenous = sc.parallelize([
    ('Ferrari', 'fast'),
    {'Porsche': 100000},
    ['S', 'R', 4054]
]).collect()

如果对数据集使用.collect()方法, 可以访问对象中的数据

data_heterogenous[1]['Porsche']

执行结果是100000
.collect()方法把RDD的所有元素返回给驱动程序,驱动程序将其序列转换为一个列表。
从文本文件读取数据中,文件中的每一行形成了RDD的一个元素。

3. 全局作用域和局部作用域

Spark可以在两种模式下运行:本地和集群。在本地运行Spark代码时与之前使用Python没有什么区别,只是加上了一个交织的部分,数据和代码在不同的工作者进程直接的复制。
在集群上运行时,当我们提交任务时,任务会发送给驱动程序节点,驱动程序节点会为任务创建DAG,并且决定哪一个执行者节点将运行特定的任务。然后该驱动程序指示执行者执行他们的任务,并且在结束时将结果返回给驱动程序。在执行之前,驱动程序为每一个任务的终止做准备:驱动程序有一组变量和方法,以便工作者在RDD上执行任务。这组变量和方法在执行者上下文本质中是静态的,即每个执行器从驱动程序中获得一份变量和方法副本,运行任务时,如果执行者改变这些变量或者覆盖这些方法,它不影响任何其他执行者的副本或者驱动程序的变量和方法。这可能会导致一些错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值