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划分
rdd重分区--repartition和coalesce
最新推荐文章于 2024-07-18 11:26:53 发布