Spark中的Transform和Action,为什么Spark要把操作分为Transform 和Action?常用的列举一些,说下算子原理 ?

在 Spark 中,操作被分为两种类型:Transformations(转换操作)和 Actions(行动操作)。这种设计主要是为了实现 Spark 的核心特性之一——惰性计算。

  1. Transformations(转换操作):这些操作用于创建一个新的 RDD(弹性分布式数据集)从现有的 RDDs。Transformations 是惰性的,意味着它们不会立即执行。实际的计算发生在一个 Action 操作被调用时。常见的转换操作包括 map(将函数应用于 RDD 中的每个元素)、filter(筛选出满足条件的元素)、flatMap(与 map 类似,但每个输入项可以映射到 0 或多个输出项)等。

  2. Actions(行动操作):这些操作用于在 RDDs 上执行计算并产生结果。当一个 Action 操作被调用时,Spark 会触发实际的计算过程。常见的行动操作包括 reduce(对 RDD 中的元素应用一个函数,这个函数应该是可交换且可结合的,以便并行运算)、collect(将整个 RDD 收集到一个中央节点上)、count(计算 RDD 中的元素数量)等。

这种区分的原因在于 Spark 的工作方式。Spark 通过转换操作构建起一个称为“有向无环图”(DAG)的执行计划。当一个行动操作被调用时,Spark 会根据 DAG 来优化计算过程并开始实际的数据处理。这种设计允许 Spark 高效地处理大规模数据集,因为它只会在必要时进行计算,并且可以在整个数据处理过程中进行优化。

例如,在使用 map 转换对数据集进行一系列的处理后,直到调用例如 collectcount 这样的行动操作时,Spark 才会实际开始处理数据。这意味着,如果数据集很大,但你只对其中的一小部分感兴趣,Spark 可以优化执行计划,仅处理必要的数据,从而提高效率。

发表评论

后才能评论