弹性分布式数据集 (RDD) 是不可篡改、可容错的元素集合,可以分布在多个集群节点上以并行处理。RDD 是开源数据处理引擎 Apache Spark 中的基本数据结构。
Apache Spark 是一种快速、开源、大规模的数据处理引擎,通常用于机器学习 (ML) 和人工智能 (AI) 应用程序。可将 Spark 视作 Hadoop 的改进版,更具体地说,是对 Hadoop 原生数据处理框架 MapReduce 的改进。
Spark 通过在大型计算机集群之间分配数据处理工作流程来实现扩展,并利用内置功能支持多个节点上的并行计算以及容错。
它包括许多应用程序编程接口 (API),适用于常见的数据科学和数据工程编程语言,包括 Java™、Python (PySpark)、Scala 和 R。
Spark 使用 RDD 来管理和处理数据。每个 RDD 被分成多个逻辑分区,这些分区可以同时在不同的集群节点上进行计算。用户可以执行两种类型的 RDD 操作:转换和行动。
Spark 对内存中的 RDD 执行转换操作和行动操作,这是 Spark 速度更快的关键。Spark 还可以将数据存储在内存中或写入磁盘以增加持久性。
弹性分布式数据集具有弹性且为分布式。那意味着:
RDD 之所以称为“分布式”,是因为它们被拆分为较小的数据组,这些数据组可以分发到不同的计算节点并同时进行处理。
除了这两个核心特征外,RDD 还有其他一些特性,决定了其在 Spark 中的重要性和操作。
在 Spark 中,所有转换(用于创建新 RDD 的操作)都是“惰性的”,意味着数据不会立即被加载或计算。
相反,转换操作在有向无环图 (DAG) 中被跟踪,并且仅在驱动程序有特定的行动调用时才运行。
驱动程序指示 Spark 作业上的集群计算的主要功能和操作,例如聚合、收集、计数或将输出保存到文件系统。
数十种可能的行动操作和转换操作包括 aregateByKey、countByKey、flatMap、groupByKey、reduceByKey 和 sortbyKey。
惰性求值有助于消除不必要的处理和删减不必要的计算,从而优化数据处理流水线。
Spark 在多个节点上自动对 RDD 进行分区,这样它就可以处理单一节点无法容纳的海量数据。为了避免损坏,每个单独的分区都存储在一个节点上,而不是分布在多个节点上。
使用 RDD,组织将能够定义计算分区的位置,以便任务可以在靠近所需数据的位置运行。这种位置分配方式有助于提高处理速度。
此外,还可以增加集群中的执行器(执行驱动程序分配的任务的计算机)的数量,以增强系统的并行处理能力。输出中的并行度取决于父 RDD 中的分区数量。
可以在集群的逻辑分区中创建 RDD,以便在多个节点上实现并行操作。可以从各种稳定的存储源创建 RDD,例如 Amazon Web Services (AWS) S3、Hadoop 分布式文件系统 (HDFS)、Apache HBase 和 Cassandra。也可以通过 Scala 和 Python 等编程语言来创建 RDD。
Spark RDD 可以跨操作将数据集缓存在内存中。每个节点都可以将其计算出的分区存储在内存中,并在对数据集或结果数据集执行后续操作时重新使用。这种持久性可以大幅加快处理速度。
Spark 还为用户提供了交互式存储选项,让他们能够控制数据的存储方式。数据可以存储在内存或磁盘中,或同时采用两者相结合的方式。
RDD 是不可变的,这意味着它们在创建后无法修改。不变性有助于数据在多次操作中保持稳定。
这还能让多个进程共享数据变得更容易、更安全,并有助于防止不同线程同时更新而造成的数据损坏。
虽然 RDD 不可篡改,但用户可以通过对现有 RDD 执行转换操作来创建新的 RDD,这样,就可以在不更改原始数据的情况下更新数据集。
RDD 可以处理非结构化和结构化数据。 在处理非结构化数据时,可以从多种类型的数据库、媒体流或文本文件中提取信息,而无需固定架构或创建 DataFrame。
也就是说,用户可以在 Spark 中创建 DataFrame,这样就可以利用某些优化来提高性能。
设计数据战略,消除数据孤岛、降低复杂性并提高数据质量,以获得卓越的客户和员工体验。
watsonx.data 支持您通过开放、混合和已治理数据,利用您的所有数据(无论位于何处)来扩展分析和 AI。
通过 IBM® Consulting 发掘企业数据的价值,建立以洞察分析为导向的组织,实现业务优势。
1 Apache Spark™,软件基金会,2024 年 12 月 20 日。