Shuffle依赖一般被应用在作业调度过程中阶段的划分,在第7章会讲解这一过程。Shuffle依赖的对应实现为ShuffleDependency类,其代码如下。
ShuffleDependency类中几个成员的作用如下。
1)rdd:用于表示Shuffle依赖中,子RDD所依赖的父RDD。
2)shuffleId:Shuffle编号,用于在Spark应用程序中唯一标识一个Shuffle依赖。
3)shuffleHandle:Shuffle句柄,在Shuffle过程中,被用于传递Shuffle相关信息给各个并行任务。
4)partitioner:分区器,用于决定Shuffle过程中reducer的个数(实际上是子RDD的分区个数)以及map端的一条数据记录应该分配给哪一个Reducer,也可以被用在CoGroupedRDD中,确定父RDD与子RDD之间的依赖关系类型。关于分区器的细节,我们会在6.5节中介绍。
5)serializer:序列化器,用于Shuffle map端数据的序列化和reduce端数据的反序列化。
6)KeyOrdering:键值排序策略,用于决定子RDD的一个分区内,如何根据键值对<K,V>类型数据记录进行排序。
7)Aggregator:聚合器,内部包含了多个聚合函数,比较重要的函数有createCombiner:V=>C,mergeValue:(C,V)=>C以及mergeCombiners:(C,C)=>C。例如,对于groupByKey操作,createCombiner表示把第一个元素放入到集合中,mergeValue表示一个元素添加到集合中,mergeCombiners表示把两个集合进行合并。这些函数被用于Shuffle过程中数据的聚合,第7章将会介绍其作用。
8)mapSideCombine:用于指定Shuffle过程中是否需要在map端进行combine操作。如果指定该值为true,由于combine操作需要用到聚合器中的相关聚合函数,因此Aggregator不能为空,否则Spark会抛出异常。例如在groupByKey转换操作对应的ShuffleDependency中,mapSideCombine=false,而在reduceByKey转换操作中,mapSideCombine=true。(www.xing528.com)
ShuffleDependency类中几个成员的作用如下。
1)rdd:用于表示Shuffle依赖中,子RDD所依赖的父RDD。
2)shuffleId:Shuffle编号,用于在Spark应用程序中唯一标识一个Shuffle依赖。
3)shuffleHandle:Shuffle句柄,在Shuffle过程中,被用于传递Shuffle相关信息给各个并行任务。
4)partitioner:分区器,用于决定Shuffle过程中reducer的个数(实际上是子RDD的分区个数)以及map端的一条数据记录应该分配给哪一个Reducer,也可以被用在CoGroupedRDD中,确定父RDD与子RDD之间的依赖关系类型。关于分区器的细节,我们会在6.5节中介绍。
5)serializer:序列化器,用于Shuffle map端数据的序列化和reduce端数据的反序列化。
6)KeyOrdering:键值排序策略,用于决定子RDD的一个分区内,如何根据键值对<K,V>类型数据记录进行排序。
7)Aggregator:聚合器,内部包含了多个聚合函数,比较重要的函数有createCombiner:V=>C,mergeValue:(C,V)=>C以及mergeCombiners:(C,C)=>C。例如,对于groupByKey操作,createCombiner表示把第一个元素放入到集合中,mergeValue表示一个元素添加到集合中,mergeCombiners表示把两个集合进行合并。这些函数被用于Shuffle过程中数据的聚合,第7章将会介绍其作用。
8)mapSideCombine:用于指定Shuffle过程中是否需要在map端进行combine操作。如果指定该值为true,由于combine操作需要用到聚合器中的相关聚合函数,因此Aggregator不能为空,否则Spark会抛出异常。例如在groupByKey转换操作对应的ShuffleDependency中,mapSideCombine=false,而在reduceByKey转换操作中,mapSideCombine=true。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。