文章目录
1. Spark中Transformation算子
1.1. map
- 每个元素都会调用一次map方法
- 接收一个函数,把这个函数用于 RDD 中的每个元素,将函数的返回结果作为结果RDD 中对应元素的结果
1.2. lookup
- lookup用于(K,V)类型的RDD,指定K值,返回RDD中该K对应的所有V值
1.3. mapPartitions
- 每个分区调用一次mapPartitions方法
- Return a new RDD by applying a function to each partition of this RDD
- 详细链接
1.4. flatMap
- 意思大概就是将f这个函数应用到Seq里的所有元素,并将函数产生的集合里的元素取出来,组成一个新的集合。然后返回这个新的集合
- 详细链接
1.5. mapPartitionsWithIndex
-和mapPartitions功能一致,并且能够获取分区的索引号
1.6. mapPartitionsWithContext
-和mapPartitions功能一致,并且带了上下文参数信息
1.7. combineByKey [pair]
-combineByKey()是最通用的对key-value型rdd进行聚集操作的聚集函数(aggregation function)。类似于aggregate(),combineByKey()允许用户返回值的类型与输入不一致。
1.8. reduceByKey
-reduceByKey底层也是通过combineByKeyWithClassTag来实现的
-combineByKeyWithClassTag的第一个参数默认为(v: V) => v,所以对元素不会产生任何影响
-第二、三两个参数都一样,是reduceByKey传递过来的,将两个值变成一个值(V, V) => V
1.9. groupByKey
-groupByKey底层也是通过combineByKeyWithClassTag来实现的
-groupByKey的返回值为RDD[(K, Iterable[V])],val值是一个迭代器,其内容包含所有key值为K的元祖的value值
-执行过程类似reduceByKey,只是已经帮你写好了每个函数,但是参数mapSideCombine = false,也就意味着,不在map端执行,在reduce端执行
1.10. aggregateByKey
- aggregateByKey与aggregate类似,都是进行两次聚合,不同的是后者只对分区有效,前者对分区中key进一步细分,底层也是调用的combineByKey
- 详细链接
2. Spark中Action算子
2.1. aggregate
- 聚合函数,输入和输出类型一致
- 详细链接
注意:
val mergeResult = (index: Int, taskResult: U) => jobResult = combOp(jobResult, taskResult)
- val mergeResult = (index: Int, taskResult: U) =>
Unit
{jobResult = combOp(jobResult, taskResult)}