重新分配 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