Spark源码之coalesce算子

1、问题背景

        总所周知,spark的rdd编程中有两个算子repartition和coalesce。公开的资料上定义为,两者都是对spark分区数进行调整的算子。

        repartition会经过shuffle,其实际上就是调用的coalesce(shuffle=true)。

        coalesce,默认shuffle=false,不会经过shuffle。

        当前仅针对coalesce算子考虑,我们看一下官方的定义:

        大概意思为:如果你想要从1000个分区到100个分区,并且不经过shuffle,近乎平均分配10个父分区到1个子分区。

        首先我说下我个人简单理解:不经过shuffle,就意味着coalesce算子前后都是在一个stage中的。从该stage开始到coalesce算子之前的任务的迭代执行的并行度都是1000,从coalesce算子开始到该stage结束的任务的迭代执行的并行度都是100。

2、问题及复现

        但是在实际使用过程中发现,对于在一个stage中的多个算子,如果先进行map、之后再coalesce(1),该stage的输出的并行度确实为1,但是coalesce之前的map算子的并行度也被缩减为1。这样看的话,似乎和官方的定义有些冲突。

        因此简单对此问题进行了复现:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值