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

行动作用作用

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

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

1. collect算子

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

格式def collect(): Array[T]

参数说明:该算子没有参数。

返回值:返回一个包含 RDD 中所有元素的数组,数组元素的类型与 RDD 中元素的类型一致。

示例代码

object CollectExample {def main(args: Array[String]): Unit = {// 省略 ...// 创建一个包含整数的 RDDval numbers = sc.parallelize(1 to 10)// 使用 collect 算子将 RDD 中的元素收集到驱动程序val collectedNumbers = numbers.collect()// 输出收集到的元素collectedNumbers.foreach(println)// 停止 SparkContextsc.stop()}}
2.reduce算子

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

格式

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

参数说明:

func: (T, T) => T:这是一个二元函数,用于定义如何对 RDD 中的元素进行聚合。函数接收两个类型为 T 的元素,返回一个类型为 T 的结果。例如,若要对 RDD 中的整数进行求和,func 可以是 (x, y) => x + y。

返回值:返回一个单一的值,其类型与 RDD 中元素的类型相同。

示例代码

以下是一个使用 reduce 计算 RDD 中所有整数之和的示例:

object ReduceExample {def main(args: Array[String]): Unit = {// 省略...// 创建一个包含整数的 RDDval numbers = sc.parallelize(1 to 10)// 使用 reduce 算子计算所有元素的总和val sum = numbers.reduce(_ + _)// 输出结果println(s"RDD 中所有元素的总和为: $sum")// 停止 SparkContextsc.stop()}}
3.count算子

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

格式

def count(): Long

参数说明:该算子没有参数。

返回值:返回一个 Long 类型的值,表示 RDD 中元素的数量。

4. 示例代码

import org.apache.spark.{SparkConf, SparkContext}
object CountExample {def main(args: Array[String]): Unit = {// 创建 SparkConf 对象val conf = new SparkConf().setAppName("CountExample").setMaster("local[*]")// 创建 SparkContext 对象val sc = new SparkContext(conf)// 创建一个包含字符串的 RDDval words = sc.parallelize(List("apple", "banana", "cherry", "date"))// 使用 count 算子统计 RDD 中元素的数量val count = words.count()// 输出结果println(s"RDD 中元素的数量为: $count")// 停止 SparkContextsc.stop()}}
4.foreach算子

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

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

参数说明:

f: T => Unit:这是一个函数,它接收一个类型为 T 的元素(T 为 RDD 中元素的类型),并对该元素执行相应的操作,但不返回任何值(返回类型为 Unit)。

返回值:该算子的返回类型为 Unit,即不返回任何有意义的值,它主要是为了执行副作用操作。

示例代码

object ForeachExample {def main(args: Array[String]): Unit = {// 创建一个包含整数的 RDDval numbers = sc.parallelize(1 to 5)// 使用 foreach 算子对每个元素应用打印操作numbers.foreach(num => println(s"元素: $num"))// 停止 SparkContextsc.stop()}
}

相关文章:

  • Debezium BinaryLogClient详解
  • 【愚公系列】《Manus极简入门》024-表演艺术教练:“舞台魔法师”
  • 【车辆OTA技术全景解析:从原理到应用开发实践】
  • idea里maven自定义的setting.xml文件不生效问题
  • JAVA八股文
  • jenkins配置多nexus仓库多maven版本
  • Amazing晶焱科技:系统级 EOS 测试方法 - System Level EOS Testing Method
  • llama-Factory不宜直接挂接Ollama的大模型
  • 上海雏鸟科技再赴越南,助力10518架无人机刷新吉尼斯记录
  • 淘宝按图搜索商品(拍立淘)爬虫实战指南
  • 英伟达发布Llama-Nemotron系列新模型,性能超越DeepSeek-R1
  • leetcode1091. 二进制矩阵中的最短路径-medium
  • 使用 Apache POI 生成包含文本和图片的 Word 文档
  • 排序算法——计数排序
  • 开发 Chrome 扩展中的侧边栏图标设置实录(Manifest V3)
  • 医疗人工智能大模型中的关键能力:【中期训练】mid-training
  • 【javascript】console对象
  • 尤雨溪宣布:Vue 生态正式引入 AI
  • lvgl多语言设置
  • 深度学习模型的部署实践与Web框架选择
  • 卢正已任上海市司法局党委委员、副局长
  • 印度32座机场暂停民用航班运营,印称在边境多处发现无人机
  • 上海证监局规范辖区私募经营运作,6月15日前完成自评自纠
  • 远离军事前线的另一面暗斗:除了“断水”,印度还试图牵制对巴国际援助
  • 马克思主义理论研究教学名师系列访谈|董雅华:让学生感知马克思主义理论存在于社会生活中
  • 来论|建设性推进缅北和平进程——中国的智慧与担当