RDD 算子分类及功能
转换算子 (TRANSFORMATION)
转换算子的主要作用是对现有的 RDD 数据进行加工处理并返回一个新的 RDD。这些操作不会立即执行,而是通过惰性求值的方式延迟计算直到遇到行动算子为止。
-
基本概念:
转换算子的核心在于创建新的 RDD 并对其进行封装以扩展其功能1。常见的转换算子包括但不限于map
、filter
、flatMap
和groupByKey
。 -
分区级操作: 部分算子支持基于整个分区的操作而非逐条记录操作。例如
mapPartitions()
可用于一次性处理一个完整的分区数据集合而不是单独的数据项2。这种设计可以减少频繁调用函数带来的开销,从而提高性能。 -
重分区调整: 使用
repartition(numPartitions)
或者更底层的coalesce(numPartitions, shuffle=true/false)
方法能够改变原始 RDD 的分区数目。当需要增加或者减少分区数量时非常有用3。注意这里涉及到全局洗牌(shuffle),因此可能会带来较大的网络传输成本。
行动算子 (ACTION)
行动算子则负责触发实际的任务运行流程并将最终结果反馈给驱动程序或保存到外部存储系统中去。
-
定义说明:
它们标志着一系列先前定义好的转化过程结束,并促使 Spark 开始真正的物理运算阶段1。典型的例子有 collect(), count(), reduce() 等等。 -
具体实例展示
scala
// 创建初始RDD val dataRDD = sparkContext.makeRDD(Array(10, 20, 30), 2) // 应用action操作获取总数目 println(dataRDD.count()) // 对每个元素应用lambda表达式后收集全部结果至本地列表形式查看 println(dataRDD.map(_ * 2).collect().toList)