nag*_*036 8 apache-spark apache-spark-sql
在我们的项目中,我们正在使用repartition(1)将数据写入表中,我有兴趣知道为什么coalesce(1)不能在这里使用,因为repartition与coalesce.
我知道repartition数据在分区之间均匀分布,但是当输出文件是单部分文件时,为什么我们不能使用coalesce(1)?
小智 11
coalesce有一个问题,如果您使用小于当前执行程序数量的数字来调用它,则用于处理该步骤的执行程序数量将受到您传递给合并函数的数量的限制。
该repartition函数通过打乱数据来避免这个问题。在任何将数据减少到单个分区(或者实际上少于执行程序数量的一半)的情况下,您几乎应该始终使用repartitionover coalesce。与调用的单线程操作相比,重新分区引起的洗牌是一个很小的代价coalesce(1)
从逻辑上讲,你没有说任何其他的话。
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 在某些情况下听起来很有用,但有一些问题。
| 归档时间: |
|
| 查看次数: |
10905 次 |
| 最近记录: |