目前我遇到一个问题,某些分区需要在本地执行比其他分区更多的操作。这个问题导致网络上的不平衡工作(一些工人因为他们提前完成任务而空转)。因此,我决定将这些繁重的操作分区过滤到新的rdd并重新分配此rdd,以便将任务均匀地分配给其他工作人员。
但是,当我在重新分区后打印出分区时,我发现大多数或几乎所有分区仍然在一个工作线程上。这个事实与我对repartition
操作的预期不同,因为它会导致shuffle
。
这是我的问题的一个例子:
数据为[(0,0), (1,1), (3,3), ..., (99,99)]
。有5个奴隶和1个主人。在执行某些操作之后,一个从站具有需要比其他操作执行更多操作的分区。此分区包含[(5,5), (6,6), ..., (80,80)]
之类的内容(让我们在工作人员2上说出来)。然后,我将此分区过滤到新的rdd并使用flatMap
将数据拆分出来。
之后,我使用repartition
操作将此rdd拆分为较小的分区,我希望这些分区也应该在其他工作者上(我也试过partitionBy
)。但是,当我打印出这个rdd的每个分区中的数据时,所有/大多数分区只在一个工作者上(让我们说工人3)。即使数据从工人2移到工人3,它仍然不能均匀地分配给其他工人。
如何均匀地将这些分区分发给其他工作人员?我目前的问题还有其他解决方案吗?我有一段时间以来一直坚持这个问题。
由于