RDD 常用的算子
RDD 中的算子从功能上分为两大类
-
Transformation(转换) 它会在一个已经存在的 RDD 上创建一个新的 RDD, 将旧的 RDD 的数据转换为另外一种形式后放入新的 RDD
-
Action(动作) 执行各个分区的计算任务, 将的到的结果返回到 Driver 中
Transformation(转换)
-
map
作用
把 RDD 中的数据 一对一 的转为另一种形式
签名
def map[U: ClassTag](f: T ⇒ U): RDD[U]
参数
f → Map 算子是 原RDD → 新RDD 的过程, 传入函数的参数是原 RDD 数据, 返回值是经过函数转换的新 RDD 的数据
注意点
Map 是一对一, 如果函数是 String → Array[String] 则新的 RDD 中每条数据就是一个数组 -
flatMap
作用
FlatMap 算子和 Map 算子类似, 但是 FlatMap 是一对多
调用
def flatMap[U: ClassTag](f: T ⇒ List[U]): RDD[U]
参数
f → 参数是原 RDD 数据, 返回值是经过函数转换的新 RDD 的数据, 需要注意的是返回值是一个集合, 集合中的数据会被展平后再放入新的 RDD
注意点
flatMap 其实是两个操作, 是 map + flatten, 也就是先转换, 后把转换而来的 List 展开
Spark 中并没有直接展平 RDD 中数组的算子, 可以使用 flatMap 做这件事 -
filter
作用
Filter 算子的主要作用是过滤掉不需要的内容 -
mapPartitions(List[T] ⇒ List[U])
RDD[T] ⇒ RDD[U] 和 map 类似, 但是针对整个分区的数据转换 -
mapPartitionsWithIndex
和 mapPartitions 类似, 只是在函数中增加了分区的 Index -
mapValues
MapValues 只能作用于 Key-Value 型数据, 和 Map 类似, 也是使用函数按照转换数据, 不同点是 MapValues 只转换 Key-Value 中的 Value -
sample(withReplacement, fraction, seed)
作用