10 Spark数据处理引擎教程 - 创建和操作RDD
在前一篇教程中,我们详细讨论了如何配置Spark环境及其相关配置文件。今天,我们将探讨如何创建和操作弹性分布式数据集(RDD),这是Spark的核心数据结构之一。在后续的内容中,我们会比较RDD和DataFrame,讨论DataFrame的优势。
什么是RDD?
RDD
(弹性分布式数据集)是Spark的基本数据结构,它允许在集群中分布处理数据。RDD
具有以下几个主要特点:
- 不可变性:一旦创建,
RDD
不能被改变。操作会生成新的RDD
。 - 分布式:数据在集群中分布存储,支持并行处理。
- 弹性:如果计算过程中某个分区的数据丢失,Spark可以通过重计算来恢复数据。
创建RDD
在Spark中,有多种方式可以创建RDD
。以下是一些常见的方法:
从现有集合创建
可以从Scala、Python或Java的集合(如List
或Array
)创建RDD
,这一过程称为并行化(parallelization)。
示例(使用Python):
1 | from pyspark import SparkContext |
在上述示例中,sc.parallelize(data)
将本地的列表data
并行化为一个RDD
,随后可以使用collect()
方法将RDD
的所有元素收集到驱动程序中。
从外部数据源创建
RDD
还可以从外部数据源(如HDFS、S3、文本文件等)加载数据。
示例(读取文本文件):
1 | # 从文本文件创建RDD |
在这一例子中,textFile
方法从指定的文件路径读取数据并将其转换为RDD
。
操作RDD
在创建了RDD
之后,我们可以对其进行各种操作。Spark支持两种类型的操作:转换和行动。
转换
转换操作是指在RDD上进行的一系列转换,这些转换是惰性执行的,只有在行动操作时才会被真正计算。常见的转换包括:
map(func)
:对RDD中的每个元素应用func
并返回一个新的RDD。filter(func)
:返回一个新的RDD,包含通过func
测试的所有元素。flatMap(func)
:类似于map
,但每个输入元素可以映射到0个或多个输出元素。
示例(使用map
和filter
):
1 | # 使用map将每个元素乘以2 |
行动
行动操作会触发计算并返回结果到驱动程序。这些操作包括:
collect()
:将所有元素收集到驱动程序中。count()
:返回RDD中元素的数量。foreach(func)
:对RDD中的每个元素执行func
操作,通常用于副作用。
示例(使用count
):
1 | # 计算元素数量 |
小结
在本篇中,我们学习了如何创建和操作RDD,掌握了不同的创建方法和常见的转换及行动操作。RDD
提供了强大的数据处理能力,并为后续的DataFrame提供了基础。
接下来,我们将在下一篇中探讨DataFrame及其相较于RDD的优势。通过了解这两者之间的区别,你将能够更好地选择合适的工具来解决特定的数据处理任务。
10 Spark数据处理引擎教程 - 创建和操作RDD