在Spark中,我有两个PairRDD(我们称之为A和B),每个都由n个分区组成。我想根据他们的密钥加入这些RDD。
两个RDD始终是分区的,即,如果密钥x和y在RDD A中的同一分区中,它们也在RDD B中的同一分区中。对于RDD A,我可以确保使用分区完成分区特别是分区。但对于RDD B,分区索引可能与RDD A的分区索引不同(RDD B是某些遗留库的输出,如果不是绝对必要的话我不愿意接触)。
我想在不执行shuffle的情况下有效地加入RDD A和B.理论上,如果我可以重新分配RDD B的分区号,使它们与RDD A中的分区号匹配,那么这将很容易。
我现在的问题是:是否可以编辑RDD的分区号(基本上可以对它们进行置换)?或者可以选择分配器而不会导致混洗操作?或者你是否看到了解决这个问题的另一种方式,我目前看上去太盲目了?
答案 0 :(得分:0)
是的,您可以更改分区。但是为了减少混洗数据,必须共同位于同一个集群节点上。
正如您所提到的,存在一致的分区,您无需重新分区(或编辑现有的分区数量)。
请注意保证数据托管很难实现