当前位置: 首页 > news >正文

Spark处理过程-转换算子和行动算子

(一)RDD的处理过程


  RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD,以供给下一次“转换”操作使        用,直到最后一个RDD经过“行动”操作才会真正被计算处理。

1.延迟。RDD中所有的转换都是延迟的,它们并不会直接计算结果。相反,他们只是记住这些应用    到基础数据集上的转换动作。只有当发生要求返回结果给driver的动作时,这些转换才会真正运     行。
2.血缘关系。一个RDD运算之后,会产生新的RDD。

(二)转换算子
转换算子用于对 RDD 进行转换操作,生成一个新的 RDD。转换操作是惰性的,即当调用转换算子时,Spark 并不会立即执行计算,而是记录下操作步骤,直到遇到行动算子时才会触发实际的计算。

从格式和用法上来看,它就是集合对象的方法。

以下是一些常见的转换算子:

        1.map 算子
作用:对 RDD 中的每个元素应用给定的函数 f,将每个元素转换为另一个元素,最终返回一个新的 RDD。这个函数 f 接收一个输入类型为 T 的元素,返回一个类型为 U 的元素。

        2.filter 算子
作用:筛选出 RDD 中满足函数 f 条件(即 f 函数返回 true)的元素,返回一个新的 RDD,新 RDD 中的元素类型与原 RDD 相同。

格式:def filter(f: T => Boolean): RDD[T]

        3.flatMap算子
作用:对 RDD 中的每个元素应用函数 f,函数 f 返回一个可遍历的集合,然后将这些集合中的元素扁平化合并成一个新的 RDD。

格式:def flatMap[U: ClassTag](f: T => TraversableOnce[U]): RDD[U]

4.reduceByKey 算子
reduceByKey 是 Spark 中用于处理键值对(Key - Value)类型 RDD 的一个重要转换算子。它的核心作用是对具有相同键的所有值进行聚合操作,通过用户提供的聚合函数将这些值合并成一个结果,从而实现数据的归约和统计。例如统计每个键出现的次数、计算每个键对应值的总和、平均值等。

格式:def reduceByKey(func: (V, V) => V, numPartitions: Int): RDD[(K, V)]

(三)行动算子
行动算子(Action) 是一种触发 RDD 计算的操作。与转换算子(Transformation)不同,行动算子会返回一个结果给驱动程序(Driver Program),或者将结果写入外部存储系统。行动算子是触发 Spark 计算的“触发点”,因为 Spark 的 RDD 是懒惰计算的,只有在执行行动算子时,才会真正开始计算。

下面介绍集中常见的行动算子。

        1. collect算子
作用:用于将分布式存储在集群中各个节点上的 RDD 元素收集到驱动程序(Driver Program)中,并以数组的形式返回。这意味着该算子会触发 Spark 作业的执行,将之前的转换操作进行实际计算,并将结果汇总到驱动程序所在的节点。

格式:def collect(): Array[T]

        2.reduce算子
作用:reduce 用于对 RDD 中的元素进行全局聚合操作,例如计算 RDD 中所有元素的总和、最大值、最小值等。在分布式计算环境中,reduce 会先在每个分区内进行局部聚合,然后将各个分区的结果进行全局聚合,最终得到一个单一的结果。

格式:def reduce(func: (T, T) => T): T

        3.count算子
作用:
count 是 Spark 中的一个行动算子,用于统计 RDD 中元素的数量。它会触发 Spark 作业的实际执行,对 RDD 中的所有元素进行计数,并将最终的计数结果返回给驱动程序。例如在进行数据验证、抽样或者评估数据处理任务的复杂度时,都可能需要知道 RDD 中元素的数量

格式:def count(): Long

        4.foreach算子
作用:foreach 用于对 RDD 中的每个元素应用指定的函数。它主要用于执行一些副作用操作,比如将数据写入外部存储系统(如数据库、文件系统等),或者进行日志记录等。与其他转换算子不同,foreach 不会返回一个新的 RDD,而是直接对每个元素执行操作。

格式:def foreach(f: T => Unit): Unit

相关文章:

  • Lodash isEqual 方法源码实现分析
  • Spring Cloud Sleuth 链路追踪
  • Java面试高阶篇:Spring Boot+Quarkus+Redis高并发架构设计与性能优化实战
  • ZYNQ笔记(二十):Clocking Wizard 动态配置
  • 【开源工具】深度解析:基于PyQt6的Windows时间校时同步工具开发全攻略
  • bazel迁移cmake要点及具体迁移工程示例(apollo radar)
  • 技术视界 | 青龙机器人训练地形详解(四):复杂地形精讲之斜坡
  • 智表 ZCELL 插件快速入门指南(原创)
  • 详解 IRC协议 及客户端工具 WeeChat 的使用
  • 华为ensp实现跨vlan通信
  • 全视通智慧病房无感巡视解决方案:科技赋能,重塑护理巡视新篇
  • 【数据结构】——队列
  • web:InfiniteScroll 无限滚动
  • iOS safari和android chrome开启网页调试与检查器的方法
  • 基于Vue3.0的高德地图api教程005:实现绘制线并编辑功能
  • iOS即时通信的技术要点
  • fiddler 配置ios手机代理调试
  • AI赋能:构建个性化智能学习规划系统
  • 专题二:二叉树的深度搜索(求根节点到叶节点数字之和)
  • 第三方软件测评中心分享:软件功能测试类型和测试工具
  • 小米SU7 Ultra风波升级:数百名车主要求退车,车主喊话雷军“保持真诚”
  • 训练孩子的科学思维,上海虹口推出“六个一百”旗舰工程
  • “降息潮”延续,多家民营银行下调存款利率
  • 女高音吴睿睿“古词新唱”,穿着汉服唱唐诗宋词
  • 新疆交通运输厅厅长西尔艾力·外力履新吐鲁番市市长候选人
  • 特朗普将启的中东行会如何影响伊美核谈判?专家分析