【问题标题】:Which situation is it better to use coalesce vs repartition [duplicate]在哪种情况下使用合并与重新分区更好[重复]
【发布时间】:2019-06-11 07:26:04
【问题描述】:

我的数据按数据静态分区并按国家/地区动态分区。所以对于每个日期,我可以有多达 180 个国家分区。看起来像这样:

/20180101/cntry=us/ => 100kb
         /cntry=ca/ => 500kb
         /cntry=uk/ => 1.5mb

对于每个日期,数据都很小(大约 20-100mb),并且在国家/地区分区之间进行划分。我想知道对于这样的情况,哪种方法会更好?重新分区还是合并?由于数据很小,合并会更好吗?我很困惑什么时候合并或重新分区会是更好的选择,具体取决于数据的大小。

【问题讨论】:

标签: scala apache-spark partitioning


【解决方案1】:

由于数据分布不均,我对 Coalesce 的体验非常糟糕。 Coalesce 和 Repartition 的最大区别在于,Repartitions 调用完全 shuffle 创建平衡的 NEW 分区,而 Coalesce 使用已经存在但可以创建不平衡的分区,这对下游数据的消费者可能非常不利。

在您的情况下,由于您的数据已经按国家/地区划分,因此合并不会产生太大影响。而且数据非常小,不会有问题。但从开发角度来看,我个人使用重新分区。

您可以在this 博客文章中查看更多详细信息。

【讨论】:

  • 同意@Thiago Baldimcoalesce 拥有bitten me too
  • 嗯,如果我使用重新分区,我怎么知道要创建的重新分区的数量?
  • 它与合并有何不同?您还需要确定分区的数量
  • @LiorChaga 但是你如何决定分区的数量?
  • 您可以从直觉开始,然后进行反复试验。最终,您不仅应该考虑作业性能本身,还要考虑它对存储或下游作业的影响。例如 - 写入 HDFS 时根本没有重新分区可能会导致许多小文件,这对 HDFS 来说是不好的做法。
猜你喜欢
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 2017-11-04
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
相关资源
最近更新 更多