我想在两个非常大的键值对 RDD 之间进行连接操作。这两个RDD的key来自同一个集合。为了减少数据混洗,我希望我可以添加一个预分发阶段,以便具有相同键的分区将分布在同一台机器上。希望这可以减少一些洗牌时间。
我想知道 spark 是否足够聪明来为我做这件事,还是我必须自己实现这个逻辑?
我知道当我加入两个 RDD 时,一个是用 partitionBy 预处理的. Spark 足够聪明,可以使用这些信息并且只对另一个 RDD 进行洗牌。但是我不知道如果我同时在两个 RDD 上使用 partitionBy 然后进行 join 会发生什么。
最佳答案
如果您对两个 RDD 使用相同的分区器,您就可以实现数据集的共同分区。这并不一定意味着您的 RDD 位于同一位置——也就是说,分区数据位于同一节点上。
尽管如此,性能应该会更好,就好像两个 RDD 都有不同的分区器一样。
关于scala - 当使用相同的键集创建两个不同的 Spark Pair RDD 时,Spark 是否会将具有相同键的分区分配到同一台机器上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34368202/