谁能解释一下我在spark DAG中的spark阶段交换的含义。作为交换,我的大多数阶段要么开始,要么结束。
1)。WholeStageCodeGen ->交换2)。Exchange -> WholeStageCodeGen -> SortAggregate -> Exchange
发布于 2017-08-29 19:13:42
整个阶段代码生成是一种受现代编译器启发的技术,它将整个查询压缩为单个函数。在整个阶段代码生成之前,每个物理计划都是一个类,其中包含定义执行的代码。对于整个阶段的代码生成,计划树中的所有物理计划节点协同工作,在单个函数中生成Java代码以供执行。然后使用Janino (一种快速Java编译器)将这些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)无论你在哪里看到*,这意味着在聚合之前,整个aggregation已经生成了手写代码。交换意味着jobs.Exchange之间的Shuffle Exchange没有整个阶段的代码生成,因为它是通过网络发送数据的。
https://stackoverflow.com/questions/45937087
复制相似问题