重新分区大分区并通过Spark在网络上分发

时间:2016-08-02 22:28:22

标签: apache-spark pyspark partitioning concept

目前我遇到一个问题,某些分区需要在本地执行比其他分区更多的操作。这个问题导致网络上的不平衡工作(一些工人因为他们提前完成任务而空转)。因此,我决定将这些繁重的操作分区过滤到新的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,它仍然不能均匀地分配给其他工人。

如何均匀地将这些分区分发给其他工作人员?我目前的问题还有其他解决方案吗?我有一段时间以来一直坚持这个问题。

由于

0 个答案:

没有答案