【问题标题】:How wide transformations are influenced by shuffle partition configshuffle 分区配置对转换的影响范围有多大
【发布时间】:2022-10-07 03:32:27
【问题描述】:

广泛的转换如何根据随机分区配置实际工作?

如果我有以下程序:

spark.conf.set(\"spark.sql.shuffle.partitions\", \"5\")
val df = spark
    .read
    .option(\"inferSchema\", \"true\")
    .option(\"header\", \"true\")
    .csv(\"...\\input.csv\")
df.sort(\"sal\").take(200)

这是否意味着 sort 会输出 5 个新分区(按照配置),然后 spark 从这 5 个分区中获取 200 条记录?

  • AFAIK spark.sql.shuffle.partitions 在此示例中不会发挥任何作用。

标签: apache-spark apache-spark-dataset spark-shuffle


【解决方案1】:

正如评论中提到的,您的示例代码不受影响,因为这种排序不会触发随机播放,在计划中您会发现类似这样的内容

 == Physical Plan ==
 TakeOrderedAndProject (2)
 +- Scan csv  (1)

但是例如,当您稍后进行一些连接(或任何其他会触发随机播放的广泛转换)时,您可以看到在交换期间将使用此参数的值(检查分区行数)

启用自适应查询执行时可能不是这种情况,在这种情况下可能看起来像这样

现在您可以看到在 spark.sql.shuffle.partitions 的开始值被使用,但后来由于 AQE Spark 更改了计划并且在随机读取时分区数更改为 8(您可能还看到 SMJ 更改为广播哈希加入 - 它也是由 AQE 完成的)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 2019-10-22
    • 2015-06-25
    • 2023-02-02
    • 2015-10-09
    相关资源
    最近更新 更多