Spark阶段交换的意义

问题描述 投票:0回答:1

任何人都可以解释一下我的 Spark DAG 中的 Spark 阶段中交换的含义吗?我的大部分阶段都是以交换开始或结束。

1)。 WholeStageCodeGen -> 交换 2)。交换 -> WholeStageCodeGen -> SortAggregate -> 交换

apache-spark apache-spark-sql
1个回答
27
投票

全阶段代码生成是一种受现代编译器启发的技术,可将整个查询折叠为单个函数。

在全阶段代码生成之前,每个物理计划都是一个类,其中包含定义执行的代码。通过全阶段代码生成,计划树中的所有物理计划节点协同工作,在单个函数中生成 Java 代码以供执行。然后使用快速 Java 编译器 Janino 将 Java 代码转换为 JVM 字节码。然后 JVM JIT 开始进一步优化字节码并最终将它们编译成机器指令。

例如

== Physical Plan ==
*Project [id#27, token#28, token#6]
+- *SortMergeJoin [id#27], [id#5], Inner
   :- *Sort [id#27 ASC NULLS FIRST], false, 0
   :  +- Exchange hashpartitioning(id#27, 200)

凡是看到*的地方,都表示

wholestagecodegen
在聚合之前已经生成了手写代码。 Exchange是指作业之间的Shuffle Exchange。 Exchange 没有全阶段代码生成,因为它通过网络发送数据。

© www.soinside.com 2019 - 2024. All rights reserved.