本文主要是介绍理解Spark-RDD的Shuffle操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.Spark中的某些操作会触发称为shuffle的事件。 随机广播是Spark的重新分发数据的机制,因此它可以跨分区进行不同的分组。
这通常涉及跨执行程序和机器复制数据,使得Shuffle成为复杂且昂贵的操作。
2.为了理解在shuffle期间发生的事情,我们可以考虑reduceByKey操作的示例。 reduceByKey操作生成一个新的RDD,
其中单个键的所有值都组合成一个元组 - 键和对与该键关联的所有值执行reduce函数的结果。 挑战在于,并非单个密钥的所有值都必须位于同一个分区,
甚至是同一个机器上,但它们必须位于同一位置才能计算结果。
3.在Spark中,数据通常不跨分区分布,以便在特定操作的必要位置。 在计算过程中,单个任务将在单个分区上运行 - 因此,
要组织单个reduceByKey reduce任务执行的所有数据,Spark需要执行全部操作。 它必须从所有分区读取以查找所有键的所有值,然后将分区中的值汇总在一起以计算每个键的最终结果 - 这称为shuffle。
4.尽管新Shuffle数据的每个分区中的元素集将是确定性的,并且分区本身的排序也是如此,但这些元素的排序不是。
如果在随机播放后需要可预测的有序数据,则可以使用:
-
mapPartitions使用例如.sorted对每个分区进行排序
-
repartitionAndSortWithinPartitions在同时重新分区的同时有效地对分区进行排序
-
sortBy来创建一个全局排序的RDD
5.可以导致Shuffle的操作包括重新分区操作,如重新分区和合并,“ByKey操作(计数除外),如groupByKey和reduc
这篇关于理解Spark-RDD的Shuffle操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!