RDD什么时候可以获得它的首选位置?如何确定首选位置? 我在重新分配和合并中看到了一些奇怪的行为,我无法理解: 1.当合并n到n-1个分区时,我看到spark只将一个分区合并到另一个分区。 (我认为理想行为将均匀分布到所有n-1个节点)
上述行为是否与preferedLocations有关?
答案 0 :(得分:0)
请注意rdd.repartition(n)
只调用rdd.coalesce(n, shuffle = true)
,因此我们只是将shuffle true与false进行比较。
在此模式下,Spark构造一个新的RDD,其分区包含父RDD的一个或多个分区 - 如果您从n
分区合并 - > n/2
分区,然后每个分区由父级中两个半随机分区的元素组成。当您想要减少分区并且分区已经平衡时,此模式是合适的,例如当您完成一个大致相同地影响每个分区中的元素的过滤器时。开销很低。另请注意,使用此模式无法增加分区数。
对于某些背景知识,我建议this blog post更多地了解我们如何以及为什么要洗牌。这种执行模式的根本区别在于:
shuffle=false
将生成不平衡分区,但shuffle=true
将解决问题)首选位置与它没有太大关系 - 您只能在shuffle = false
模式下看到首选位置,因为保留了地点而没有随机播放,但在重新播放后原始首选地点无关紧要(已更换)有关洗牌目的地的新首选地点。)