Apache Spark RDD 分区和连接
Apache Spark RDD partitioning and join
当我 join
两个 RDD
s 数据实际连接在哪里时,即数据是在驱动程序上聚合然后运回工作节点,还是其中一个节点随机抽取到"receive"个数据?此外,如果我在 pairRDD
上调用 partition
那么分区是否会自动通过密钥完成?
不,它不通过驱动程序或任何单个节点进行。发生洗牌,其中跨执行者的许多任务中的每一个都收集键子集的所有值(来自 parents)。这些任务在迭代时为每个键形成连接产品。分区是按键。加入两个 identically-partitioned RDDs 是有利的,因为你可以避免混洗。
当我 join
两个 RDD
s 数据实际连接在哪里时,即数据是在驱动程序上聚合然后运回工作节点,还是其中一个节点随机抽取到"receive"个数据?此外,如果我在 pairRDD
上调用 partition
那么分区是否会自动通过密钥完成?
不,它不通过驱动程序或任何单个节点进行。发生洗牌,其中跨执行者的许多任务中的每一个都收集键子集的所有值(来自 parents)。这些任务在迭代时为每个键形成连接产品。分区是按键。加入两个 identically-partitioned RDDs 是有利的,因为你可以避免混洗。