如果rdd1.join(rdd2)
和rdd1
具有相同的分区符,rdd2
是否会导致混乱?
答案 0 :(得分:34)
没有。如果两个RDD具有相同的分区,则join
不会导致混乱。您可以在CoGroupedRDD.scala
中看到这一点:
override def getDependencies: Seq[Dependency[_]] = {
rdds.map { rdd: RDD[_ <: Product2[K, _]] =>
if (rdd.partitioner == Some(part)) {
logDebug("Adding one-to-one dependency with " + rdd)
new OneToOneDependency(rdd)
} else {
logDebug("Adding shuffle dependency with " + rdd)
new ShuffleDependency[K, Any, CoGroupCombiner](rdd, part, serializer)
}
}
}
但请注意,缺少shuffle并不意味着不必在节点之间移动数据。两个RDD可能具有相同的分区(共同分区),但相应的分区位于不同的节点上(不在同一位置)。
这种情况仍然比洗牌更好,但要记住这一点。共址可以提高性能,但很难保证。