1. Resilient Distributed Datasets (RDDs):
RDD 是 Spark 的核心数据抽象,它代表一个不可变的、可分区的分布式集合。RDD 具有以下特性:
- 弹性(Resilient): Spark 可以通过在多个节点上重新计算丢失的分区来恢复由于节点故障而丢失的数据。
- 分布式(Distributed): RDD 可以跨多个节点分布,并能够并行处理数据。
- 不可变(Immutable): RDD 是不可变的,即创建后不能修改。如果需要对 RDD 进行转换,将生成一个新的 RDD。
- 可分区(Partitioned): RDD 可以分为多个分区,每个分区在集群的不同节点上进行处理。
创建 RDD 的方式包括从集合创建、从外部数据源加载等。以下是一个从集合创建 RDD 的示例:
val data = 1 to 100
val rdd = sc.parallelize(data)
2. DataFrames:
DataFrames 是 Spark 中的另一种并行集合抽象,它提供了更高层次的抽象和优化,适用于结构化数据。DataFrames 具有以下特性:
- 优化执行计划(Optimized Execution Plans): DataFrames 可以通过 Catalyst 优化器执行查询计划的优化,提高执行效率。
- 支持 SQL 查询: 可以使用 Spark SQL 提供的 SQL 查询接口对 DataFrames 进行查询。
- 支持多种数据格式: DataFrames 可以从多种数据源(如 JSON、Parquet、CSV)读取数据,并且可以将结果写入多种数据格式。
以下是一个创建 DataFrame 的示例:
val data = Seq(("Alice", 25), ("Bob", 30), ("Charlie", 35))
val df = data.toDF("Name", "Age")
并行集合的并行处理:
在 Spark 中,无论是 RDD 还是 DataFrame,都支持并行处理。Spark 会将数据分成多个分区,每个分区可以在集群的不同节点上并行处理。并行集合的并行性是 Spark 处理大规模数据集的关键。
例如,在 RDD 上进行 Map 操作时,每个分区的数据可以独立地进行映射操作,从而实现并行处理。对于 DataFrames,类似的原理也适用。
// RDD 并行处理示例
val doubledRDD = rdd.map(x => x * 2)
// DataFrame 并行处理示例
val agePlusTen = df.select($"Name", $"Age" + 10)
无论是 RDD 还是 DataFrame,Spark 会根据集群的计算资源并行执行操作,以提高数据处理效率。
转载请注明出处:http://www.zyzy.cn/article/detail/9339/Spark