【问题标题】:Why hardcode repartition value为什么硬编码重新分区值
【发布时间】:2017-10-07 19:55:56
【问题描述】:

查看一些示例火花代码,我看到重新分区或合并中的数字是硬编码的:

val resDF = df.coalesce(16)

管理此参数的最佳方法是什么,当集群可以在几秒钟内动态变为updated 时,此硬编码值变得无关紧要。

【问题讨论】:

  • 你是说内部Spark代码?不是你的?
  • 对不起,我的意思是开发人员提供的示例火花代码。

标签: apache-spark distributed-computing partition


【解决方案1】:

在示例中,通常会看到硬编码的值,因此您不必担心,我的意思是可以随意修改示例。我的意思是分区文档中充满了硬编码的值,但这些值只是示例。

关于分区数量的经验法则是:

一个人会希望他的 RDD 拥有与乘积一样多的分区 执行者的数量乘以使用的核心数量乘以 3(或者可能是 4)。 当然,这是一种启发式方法,它实际上取决于您的 应用程序、数据集和集群配置。

但是,请注意,重新分区并不是免费的,因此在一个非常动态的环境中,您必须确保重新分区的开销对于您将通过此操作获得的收益可以忽略不计。

正如我在answer 中提到的那样,合并和重新分区的成本可能不同。

【讨论】:

  • Coalesce 默认不强制洗牌,因此开销小于调用repartition
猜你喜欢
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
相关资源
最近更新 更多