1. A method comprising: receiving re-partitioning data describing, for each server node of a plurality of server nodes connected by a network, a quantity of data blocks to be sent to said each server node; determining a sender order for the plurality of server nodes by using the re-partitioning data to sort, in descending order, the plurality of server nodes by a total quantity of data blocks to be sent; according to the sender order, populating a network schedule comprising a plurality of time slots, wherein populating a network schedule includes for each time slot of the plurality of time slots; assigning in the sender order at most one receiver node, of the plurality of server nodes to receive one or more data blocks over the network from a sender node of said plurality of server nodes, wherein assigning at most one receiver node is based at least on having a largest possible quantity of data blocks to be received by the sender node from any server node of said plurality of server nodes not yet assigned as a receiver node in said each time slot; wherein each server node of said plurality of server nodes is assigned as a receiver node no more than once in said each time slot; wherein the method is performed by one or more computing devices.