【发布时间】:2019-11-02 19:29:17
【问题描述】:
spark 中默认的 shuffle 分区值是 200 个分区。我想澄清一下这个数字是每个输入分区的吗?或者在所有输入分区中,输出分区的数量将是 200?
我查看了几份材料,但找不到我正在寻找的答案。
【问题讨论】:
标签: apache-spark
spark 中默认的 shuffle 分区值是 200 个分区。我想澄清一下这个数字是每个输入分区的吗?或者在所有输入分区中,输出分区的数量将是 200?
我查看了几份材料,但找不到我正在寻找的答案。
【问题讨论】:
标签: apache-spark
我不确定我是否理解了你的问题,但是我想我可以给你一个我在Spark: The Definitive Guide book 找到的最好的例子来了解每个阶段的分区数量和相应的任务
对于这项工作,以下是解释输出
这项工作分为以下阶段和任务:
第 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**.
【讨论】: