📜  Apache Spark 与 Scala – 弹性分布式数据集(1)

📅  最后修改于: 2023-12-03 15:29:26.220000             🧑  作者: Mango

Apache Spark 与 Scala – 弹性分布式数据集

什么是 Apache Spark?

Apache Spark 是一个快速、通用型、基于内存的分布式计算系统,适用于大规模数据处理。它可以在数十个节点的集群上进行高性能运算。Spark 最初是从 University of California, Berkeley计算机系AMPLab(Algorithms, Machines and People Lab)开源实验室的科研项目 Apache Mesos 中衍生出来的,于 2010 年开始开发。

以下是 Spark 最新版本的架构图:

Spark架构图

Spark 的最大特点就是弹性分布式数据集(RDD),即能够高效地处理分布式数据,还支持多种语言接口,包括 Java、Scala、Python 和 R。此外,Spark 还包括一些针对数据科学家的应用程序,如 MLlib、GraphX 和 Spark Streaming。

Scala 与 Apache Spark

Scala 是一种优秀的 JVM 语言,可以与 Java 无缝交互,并且支持面向对象编程、函数式编程和混合编程。Scala 的语法简洁、灵活,也具备高效的运行速度,因此成为 Spark 的主要开发语言。

以下是 Scala 对于 Spark 的支持情况:

  • 实现与 JDK 和 JVM 生态系统的完全互操作性
  • 在 Spark RDD 中实现语言扩展和增强
  • 提供了 Spark streaming 和 GraphX 的类型安全 DSL 实现
  • Spark SQL 的类型安全表和查询 API 实现等。
弹性分布式数据集(RDD)

RDD是 Spark 最核心的一个概念,是一种高性能、弹性、高可靠性、基于内存的分布式数据集合。其可将数据分布在多台机器的内存中,避免了磁盘读取开销,从而实现了高速处理。此外,RDD 还支持类似容错操作的高可靠性检查点等特性。

以下是 RDD 的主要特征:

  • 分布式数据结构
  • 可以跨机器节点之间转移
  • 可以同时在内存或磁盘中存储
  • 支持读取HDFS、Cassandra 和 HBase 等数据源
  • 支持 lazy evaluation 以及其他机制来优化计算执行

下面是 RDD 的定义:

abstract class RDD[T: ClassTag](
    @transient private var _sc: SparkContext,
    @transient private var deps: Seq[Dependency[_]]
  ) extends Serializable with Logging {
...
}

在 Spark 中,RDD 提供了两种主要的操作:转换操作和行动操作。转换操作产生了一个新的 RDD,而行动操作在 RDD 上执行计算并返回结果。

以下是转换操作的常用例子:

  • map():对 RDD 中的每个元素执行函数,返回新的 RDD。
  • filter():从 RDD 中选取符合条件的元素,组成新的 RDD。
  • groupByKey():将 RDD 中具有相同 key 的元素分组,组成新的 RDD。
  • reduceByKey():先对每个 key 执行指定的聚合运算(如求和),再对结果进行聚合,构成新的 RDD。

以下是操作操作的常用例子:

  • count():返回 RDD 中的元素的数量。
  • collect():将 RDD 中的元素收集到本地内存,并返回一个数组。
  • reduce():对 RDD 进行聚合计算,返回一个结果。
总结

Apache Spark 是当前最受欢迎的分布式计算系统之一,Scala 则是其主要开发语言,弹性分布式数据集(RDD)则是典型特性之一。掌握 Spark 和 Scala 的组合,对于大数据处理工程师至关重要,无论是在企业应用程序还是研究领域。