联合分区的 RDD 是否会导致 Apache Spark 中的洗牌?

Does a join of co-partitioned RDDs cause a shuffle in Apache Spark?

如果 rdd1rdd2 具有相同的分区程序,rdd1.join(rdd2) 会导致随机播放吗?

没有。如果两个 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)
    }
  }
}

但是请注意,没有随机播放并不意味着没有数据必须在节点之间移动。两个 RDD 可能具有相同的分区器(共分区),但相应的分区位于不同的节点上(不共存)。

这种情况仍然比随机播放要好,但需要牢记这一点。共置可以提高性能,但很难保证。