Spark算子[02]:coalesce,repartition

概述

coalesce与repartition都是RDD的分区进行重新划分,repartition只是coalesce接口中shuffle为true的简易实现;
当spark程序中,存在过多的小任务的时候,可以通过 RDD.coalesce方法,收缩合并分区,减少分区的个数,减小任务调度成本,避免Shuffle导致,这比使用RDD.repartition效率提高不少。


源码解析

coalesce源码

  /**
   * 返回一个新的RDD,它将分区个数减少到“numPartitions”个分区。
   * 这是一个窄依赖操作;
   * 如果从1000个分区合并成100各分区,将不会有Shuffle操作,100个新分区中的每一个将占据当前分区的10个。
   * 如果要求更多的分区个数,将保持为当前的分区个数。
   *
   * 但是,当我们进行一个剧烈的合并,设置numPartitions = 1
   * 这可能导致你的计算比你想要的节点少,当numPartitions = 1时,只会在一个节点上合并;
   * 为了避免这种情况的发生,可以设置shuffle = true,这样将会添加一个shuffle操作,
   * 意味着当前的上游partitions将并行执行,无论当前的分区是几个
   *
   * @note
   * 当shuffle = true,实际上,你可以合并到更多的分区。
   * 如果您有少量的分区,比如100个,可能有几个分区异常大,这个时候这种方法很有用。
   * 调用 coalesce(1000,shuffle = true) 将会生成1000个分区,数据分布使用散列分区(hash partitioner)。
   * 可选分区合并器必须是可序列化的。
   */

  def coalesce(numPartitions: Int, shuffle: Boolean = false,
               partitionCoalescer: Option[
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生命不息丶折腾不止

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值