联合分区RDD的连接是否会导致Apache Spark的混乱?

时间:2015-02-08 14:58:24

标签: apache-spark spark-streaming rdd

如果rdd1.join(rdd2)rdd1具有相同的分区符,rdd2是否会导致混乱?

1 个答案:

答案 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可能具有相同的分区(共同分区),但相应的分区位于不同的节点上(不在同一位置)。

这种情况仍然比洗牌更好,但要记住这一点。共址可以提高性能,但很难保证。