spark的coalesce和repartition算子管理分区

源码地址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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值