重新分配 RDD

有时我们想要重新分区 RDD,例如因为它来自我们不创建的文件,并且从创建者定义的分区数量不是我们想要的。

实现这一目标的两个最着名的功能是:

repartition(numPartitions)

和:

coalesce(numPartitions, shuffle=False)

根据经验,当你想要在更多分区中重新分区 RDD 时使用第一个,而在较少数量的分区中使用第二个来减少 RDD。 Spark - repartition()vs coalesce()

例如:

data = sc.textFile(file)
data = data.coalesce(100) // requested number of #partitions

将这个 RDD 的分区数量称为数据减少到 100,因为这个 RDD 在被 textFile() 读取时有超过 100 个分区。

并且以类似的方式,如果你想要为 RDD 提供超过当前分区数量,你可以这样做(假设你的 RDD 分布在 200 个分区中):

data = sc.textFile(file)
data = data.repartition(300) // requested number of #partitions