前言
本文从源码的角度介绍了mappartitions,、mappartitionswithindex、map、flatmap、fliter等五个算子的基本原理。要理解这五个算子,必须得先理解MapPartitionsRDD。之前写过一篇文章:MapPartitionsRDD基本原理,在此不做赘述。
接下来看下上述提到的五个算子的源码
源码
mappartitions
def mapPartitions[U: ClassTag](
f: Iterator[T] => Iterator[U],
preservesPartitioning: Boolean = false): RDD[U] = withScope {
// 对入参f进行校验,如是否可序列化等,返回一个包装后功能完全和f相同的cleandF
val cleanedF = sc.clean(f)
new MapPartitionsRDD(
this,
(_: TaskContext, _: Int, iter: Iterator[T]) => cleanedF(iter),