【问题标题】:Default shuffle partition value in sparkspark中的默认随机分区值
【发布时间】:2019-11-02 19:29:17
【问题描述】:

spark 中默认的 shuffle 分区值是 200 个分区。我想澄清一下这个数字是每个输入分区的吗?或者在所有输入分区中,输出分区的数量将是 200?

我查看了几份材料,但找不到我正在寻找的答案。

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    我不确定我是否理解了你的问题,但是我想我可以给你一个我在Spark: The Definitive Guide book 找到的最好的例子来了解每个阶段的分区数量和相应的任务

    对于这项工作,以下是解释输出

    这项工作分为以下阶段和任务:

    • 第 1 阶段有 8 个任务
    • 第 2 阶段有 8 个任务
    • 第 3 阶段有 6 个任务
    • 第 4 阶段有 5 个任务
    • 第 5 阶段有 200 个任务
    • 第 6 阶段有 1 个任务

      • 前两个阶段对应于您为创建 DataFrame 而执行的范围。 默认,当您创建具有范围的DataFrame时,它有八个分区

      • 下一步是重新分区。这通过对数据进行洗牌来改变分区的数量。这些DataFrame被打乱成6个partition和5个partition,对应stage 3和4的task数量。

      • 阶段 3 和 4 在每个 DataFrame 上执行,阶段结束代表连接(随机播放)。突然,我们有 200 个任务。这是因为 Spark SQL 配置。 spark.sql.shuffle.partitions 默认值为200,表示执行过程中有shuffle时,默认输出200个shuffle partition。你可以改变这个值,输出分区的数量就会改变。

      • 最终结果单独聚合这些分区,将它们全部带到一个分区,然后最终将最终结果发送给驱动程序。

    spark docsspark.sql.shuffle.partitions 的另一个注释

    spark.sql.shuffle.partitions 200 Configures the number of partitions to use when shuffling data **for joins or aggregations**.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-02
      • 2021-05-28
      • 2016-02-12
      • 1970-01-01
      • 2014-09-17
      • 2013-06-29
      相关资源
      最近更新 更多