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

nag*_*036 8 apache-spark apache-spark-sql

在我们的项目中,我们正在使用repartition(1)将数据写入表中,我有兴趣知道为什么coalesce(1)不能在这里使用,因为repartitioncoalesce.

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

小智 11

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

repartition函数通过打乱数据来避免这个问题。在任何将数据减少到单个分区(或者实际上少于执行程序数量的一半)的情况下,您几乎应该始终使用repartitionover coalesce。与调用的单线程操作相比,重新分区引起的洗牌是一个很小的代价coalesce(1)


the*_*tom 4

从逻辑上讲,你没有说任何其他的话。