rdd重分区--repartition和coalesce

本文探讨了Spark中分区的重要性,特别是在避免数据倾斜和解决小任务问题方面的作用。此外,还详细对比了repartition和coalesce函数的区别及应用场景,并解释了shuffle的概念及其触发条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.为什么分区?
①spark数据倾斜(比如groupByKey(张三),那么所有key是张三的会分在一个区,如果张三比较多,别的 key少,造成数据倾斜)
②重分区解决spark小task问题:
filter之后,每个partition数据量减小,此时可以用重分区合并成大task,所以repartition一般用在filter之后; 如果partition较多,一个partition对应一个task,通过重分区,8个分区变成2个分区,只有2个大task(),减少资源申请;
2.repartition(100)和 coalesce(1000, shuffle = true) 关系与区别
它们两个都是RDD的分区进行重新划分,repartition只是coalesce接口中shuffle为true的简易实现
coalesce(1000, shuffle = true)第一个参数是新的Partition数目,第二个参数是是否需要shuffle。
如果重分区的数目大于原来的分区数,那么必须指定shuffle参数为true。
3.什么是shuffle呢?
个人简单理解就是数据在不同partition之间的传递过程,如2中groupByKey()就经过了shuffle
判断依据:发生了shuffle=宽依赖关系=stage划分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值