Spark RDD中repartition和coalesce的区别

1、repartition

repartition会根据用户传入的分区数重新通过网络分区所有数据,它会产生shuffle过程,所以是一个重型操作。

    val kv1: RDD[(String, Int)] = sc.parallelize(List(
      ("zhangsan", 11),
      ("zhangsan", 12),
      ("lisi", 13),
      ("wangwu", 14)
    ))
    val kv2: RDD[(String, Int)] = sc.parallelize(List(
      ("zhangsan", 21),
      ("zhangsan", 12),
      ("zhangsan", 22),
      ("lisi", 23),
      ("zhaoliu", 28)
    ))
    
    val value1: RDD[(String, Int)] = kv1.repartition(3)  ##结果:3
    println(value1.partitions.length)

2、coalesce

coalesce同样对用户传入的分区数进行分区,但是它不会产生shuffle过程。我们知道,DAGScheduler创建Task的数量取决于Stage的最后一个RDD的分区数,如果不进行shuffle,那么coalesce根本无法精准控制分区数。

    val kv1: RDD[(String, Int)] = sc.parallelize(List(
      ("zhangsan", 11),
      ("zhangsan", 12),
      ("lisi", 13),
      ("wangwu", 14)
    ))
    val kv2: RDD[(String, Int)] = sc.parallelize(List(
      ("zhangsan", 21),
      ("zhangsan", 12),
      ("zhangsan", 22),
      ("lisi", 23),
      ("zhaoliu", 28)
    ))
    val value: RDD[(String, Int)] = kv1.coalesce(5)
    println(value.partitions.length)  ##结果:1

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值