Spark阶段中Exchange的含义

Aks*_*hat 6 apache-spark apache-spark-sql spark-dataframe

任何人都可以在火花DAG的火花阶段向我解释交换的意义.我的大多数阶段要么以开始,要么以交换结束.

1).WholeStageCodeGen - > Exchange 2).Exchange - > WholeStageCodeGen - > SortAggregate - > Exchange

Nay*_*rma 9

整个阶段代码生成是一种受现代编译器启发的技术,可将整个查询折叠为单个函数.在整个代码生成之前,每个物理计划都是一个包含定义执行的代码的类.通过全阶段代码生成,计划树中的所有物理计划节点一起工作,以在单个函数中生成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)
Run Code Online (Sandbox Code Playgroud)

无论你看到*,都意味着wholestagecodegen在聚合之前生成了手写代码.Exchange意味着jobs.Exchange之间的Shuffle Exchange没有全阶段代码生成,因为它通过网络发送数据.

  • 您仅通过浏览源代码就得到了这一切吗?这在任何地方都几乎没有记录 (4认同)