源码地址https://github.com/apache/spark/blob/v2.4.0/core/src/main/scala/org/apache/spark/rdd/RDD.scala
repartition:
/ **
*返回一个具有正确numPartitions分区的新RDD。
*
*可以增加或减少此RDD中的并行度。在内部,这使用
*重新分配数据的随机播放。
*
*如果要减少此RDD中的分区数,请考虑使用`coalesce`,
*可以避免执行随机播放。
*
* /
def repartition(numPartitions: Int)(implicit ord: Ordering[T] = null): RDD[T] = withScope {
coalesce(numPartitions, shuffle = true)
}
coalesce
/ **
*返回一个新的RDD,它被缩减为`numPartitions`分区。
*
*这导致了一个狭窄的依赖,例如,如果你从1000分区
*到100个分区,不会有一个shuffle,而是每个100个
*新分区将声明10个当前分区。如果较大的数量请求分区,它将保持当前分区数。
*
*但是,如果你正在进行激烈的合并,例如对numPartitions = 1,
*这可能导致您的计算发生在比节点更少的节点上
*你喜欢(例如,numPartitions = 1时的一个节点)。要避免这种情况,
*你可以传递shuffle = true。这将添加一个洗牌步骤,但意味着
*当前的上游分区将并行执行(无论如何当前分区是什么)。
*
* 使用shuffle = true,您实际上可以合并为更大的数字
*分区。如果您有少量分区,这很有用
*说100,可能有一些分区异常大。调用
* coalesce(1000,shuffle = true)将导致1000个分区
*使用散列分区器分发数据。可选的分区聚结器
*传入必须是可序列化的。
* /
def coalesce(numPartitions: Int, shuffle: Boolean = false,
partition