重新分区(1)和合并(1)之间的区别

Posted

技术标签:

【中文标题】重新分区(1)和合并(1)之间的区别【英文标题】:Difference between repartition(1) and coalesce(1) 【发布时间】:2021-09-12 06:23:35 【问题描述】:

在我们的项目中,我们使用repartition(1)将数据写入表中,我很想知道为什么这里不能使用coalesce(1),因为repartitioncoalesce相比是一个昂贵的操作。

我知道repartition将数据平均分布在分区之间,但是当输出文件是单部分文件时,为什么我们不能使用coalesce(1)

【问题讨论】:

另见***.com/questions/44494656/… coalesce(1)repartition(1) 之间的差异可能会因旧 Spark 版本而出现:***.com/questions/71154277 【参考方案1】:

coalesce 有一个问题,如果您使用小于当前执行程序数量的数字调用它,则用于处理该步骤的执行程序数量将受到您传递给合并函数的数量的限制。

repartition 函数通过混洗数据避免了这个问题。在您将数据减少到单个分区(或者实际上,少于一半的执行程序)的任何情况下,您几乎应该总是使用 repartition 而不是因为这个原因。重分区造成的shuffle,比起调用coalesce(1)的单线程操作来说,是不小的代价

【讨论】:

【参考方案2】:

你没有在逻辑方面陈述其他任何内容。

coalesce 将使用现有分区来最小化洗牌。在 coalsece(1) 和对应的情况下可能没什么大不了的,但是可以采用 repartition 创建新分区并因此进行完全洗牌的指导原则。也就是说,coalsece 可以说是为了尽量减少改组的次数。

在我的业余时间,我偶然发现了这篇 https://medium.com/airbnb-engineering/on-spark-hive-and-small-files-an-in-depth-look-at-spark-partitioning-strategies-a9a364f908 优秀的文章。寻找引用:Coalesce 在某些情况下听起来很有用,但有一些问题。

【讨论】:

以上是关于重新分区(1)和合并(1)之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

如何将Linux系统下将俩个硬盘合并成一个分区,请高手帮忙!

Win7下面如何分割和合并硬盘分区

苹果笔记本怎么把分区合并

win7自带的分区,压缩c盘之后,未分配的空间变成了黑色,好像绿色才能正常重新分区,黑色的就会说空间不足

Spark:持久化和重新分区顺序

硬盘分区问题:未分配的部分(黑色)和可用空间(绿色)有啥区别?怎样让未分配的部分变成可用空间?