spark 算子combineByKey 详解
2017-10-05 12:22
441 查看
combineByKey 作为spark 的核心算子之一,有必要详细了解。reduceByKey 和groupByKey 等健值对算子底层都实现该算子。(1.6.0版更新为combineByKeyWithClassTag)
combineByKey 源码定义:
createCombine: 对每个分区中每个key中value中的第一个值,进行处理(可以理解为,分区内部进行按Key分组,每个Key的第一个value进行预处理)预处理逻辑。
mergeValue:分区内部进行聚合,相同的Key的value进行局部运算,区间内部聚合逻辑。
mergeCombiners:此阶段发生shuffer,对不同区间局部运算后的结果再做运算。分区之间聚合逻辑。
测试样例:
过一下下图,逻辑应该就清晰了
注意点:createCombine是对每个分区中每个key中value中的第一个值,进行处理(可以理解为,分区内部进行按Key分组,每个Key的第一个value进行预处理)预处理逻辑。
combineByKey 源码定义:
def combineByKey[C](createCombiner: (V) => C, mergeValue: (C, V) => C, mergeCombiners: (C, C) => C): RDD[(K, C)] def combineByKey[C](createCombiner: (V) => C, mergeValue: (C, V) => C, mergeCombiners: (C, C) => C, numPartitions: Int): RDD[(K, C)] def combineByKey[C](createCombiner: (V) => C, mergeValue: (C, V) => C, mergeCombiners: (C, C) => C, partitioner: Partitioner, mapSideCombine: Boolean = true, serializer: Serializer = null): RDD[(K, C)]
createCombine: 对每个分区中每个key中value中的第一个值,进行处理(可以理解为,分区内部进行按Key分组,每个Key的第一个value进行预处理)预处理逻辑。
mergeValue:分区内部进行聚合,相同的Key的value进行局部运算,区间内部聚合逻辑。
mergeCombiners:此阶段发生shuffer,对不同区间局部运算后的结果再做运算。分区之间聚合逻辑。
测试样例:
val a = sc.parallelize(List("dog","cat","gnu","salmon","rabbit","turkey","wolf","bear","bee"), 3) val b = sc.parallelize(List(1,1,2,2,2,1,2,2,2), 3) val c = b.zip(a) val d = c.combineByKey(List(_), (x:List[String], y:String) => y :: x, (x:List[String], y:List[String]) => x ::: y) d.collect res16: Array[(Int, List[String])] = Array((1,List(cat, dog, turkey)), (2,List(gnu, rabbit, salmon, bee, bear, wolf)))
过一下下图,逻辑应该就清晰了
注意点:createCombine是对每个分区中每个key中value中的第一个值,进行处理(可以理解为,分区内部进行按Key分组,每个Key的第一个value进行预处理)预处理逻辑。
相关文章推荐
- spark中算子详解:combineByKey
- spark中算子详解:combineByKey
- Spark算子:RDD键值转换操作(2)–combineByKey、foldByKey
- Spark算子[12]:groupByKey、cogroup、join、lookup 源码实例详解
- spark算子:combineByKey
- spark中算子详解:aggregateByKey
- Spark算子篇 --Spark算子之aggregateByKey详解
- Spark 核心算子:combineByKey()
- Spark算子:RDD键值转换操作(2)–combineByKey、foldByKey
- Spark算子:RDD键值转换操作(2)–combineByKey、foldByKey
- Spark之combineByKey详解Java
- Spark算子:RDD键值转换操作(2)–combineByKey、foldByKey
- Spark核心RDD:combineByKey函数详解
- Spark算子详解之reduceByKey_sample_take_takeSample_distinct_sortByKey_saveAsTextFile_intersection
- Spark编程的基本的算子之:combineByKey,reduceByKey,groupByKey
- Spark算子[10]:foldByKey、fold 源码实例详解
- Spark算子[13]:sortByKey、sortBy、二次排序 源码实例详解
- Spark核心RDD:combineByKey函数详解
- Spark核心RDD:combineByKey函数详解
- Spark核心RDD:combineByKey函数详解