【发布时间】:2015-11-25 16:13:31
【问题描述】:
在 Spark 中,我有两个 PairRDD(我们称它们为 A 和 B),每个包含 n 个分区。我想根据它们的键加入那些 RDD。
两个 RDD 是一致分区的,即,如果键 x 和 y 在 RDD A 中的同一分区中,它们也在 RDD B 中的同一分区中。对于 RDD A,我可以确保分区是使用特定的分区器。但是对于 RDD B,分区索引可能与 RDD A 的不同(RDD B 是一些遗留库的输出,如果不是绝对必要的话,我不愿意接触)。
我想有效地加入 RDD A 和 B 而不执行洗牌。理论上,如果我可以重新分配 RDD B 的分区号,使其与 RDD A 中的分区号匹配,这将很容易。
我现在的问题是:是否可以编辑 RDD 的分区号(基本上是置换它们)?或者,可以分配一个分区器而不引起洗牌操作吗?或者您是否看到了另一种解决此任务的方法,而我目前太盲目了?
【问题讨论】:
-
如果您可以控制用于 RDD A 的分区器,为什么不简单地使用与 RDD B 相同的分区器?
-
我手头的原始 RDD B 没有被那个分区器分区。而且我想避免调用 partitionBy 导致的随机播放(这会将作业运行时间增加 15 倍)。
标签: apache-spark partitioning rdd