在 Apache Spark 中,转换算子(Transformation)是用于对 RDD(弹性分布式数据集)进行转换操作的函数。这些操作是惰性的,即在调用转换算子时,Spark 并不会立即执行计算,而是记录下转换操作的轨迹,等待行动算子触发时才真正执行。
以下是一些常见的 Spark 转换算子及其功能:
单值类型转换算子
- map(func) :对 RDD 中的每个元素应用函数
func
,返回一个新的 RDD。- 示例:将一个包含整数的 RDD 中的每个元素乘以 2。
- flatMap(func) :类似于
map
,但每个输入元素可以映射为多个输出元素,返回一个扁平化的新 RDD。- 示例:将文本行分割为单词。
- filter(func) :根据函数
func
的返回值(布尔值)筛选 RDD 中的元素,返回一个包含满足条件元素的新 RDD。- 示例:从一个包含整数的 RDD 中筛选出偶数。
- distinct():对 RDD 中的元素进行去重操作。
- glom():将 RDD 中的每个分区变成一个数组。
双值类型转换算子
- union(otherRDD):对两个 RDD 进行并集操作。
- intersection(otherRDD):对两个 RDD 进行交集操作。
- subtract(otherRDD):对两个 RDD 进行差集操作。
- zip(otherRDD):将两个 RDD 中的元素按索引配对,形成键值对。
键值对类型转换算子
- groupByKey() :对 RDD 中的键值对,按照键进行分组,将相同的键对应的值聚合到一起。
- 示例:统计每个单词的出现次数。
- reduceByKey(func) :对 RDD 中的键值对,按照键进行分组后,使用函数
func
对每个键对应的值进行聚合操作。- 示例:计算每个单词的出现次数总和。
- combineByKey(createCombiner, mergeValue, mergeCombiners):对 RDD 中的键值对进行更复杂的聚合操作。
- partitionBy(partitioner):根据指定的分区器对 RDD 中的键值对进行分区。
其他转换算子
- coalesce(numPartitions):根据数据量缩减分区,用于大数据集过滤后,提高小数据集的执行效率。
- repartition(numPartitions):对 RDD 进行重新分区。
- sortby(keyfunc):对 RDD 中的元素进行排序。
这些转换算子是 Spark 数据处理流程的核心,通过合理选择和组合算子,可以高效地处理大规模数据。