第51课: Spark中的新解析引擎Catalyst源码SQL最终转化为RDD具体实现
基于DataSet的代码转换为RDD之前需要一个Action的操作,基于Spark中的新解析引擎Catalyst进行优化,Spark中的Catalyst不仅限于SQL的优化,Spark的五大子框架(Spark Cores、Spark SQL、Spark Streaming、Spark GraphX、Spark Mlib)将来都会基于Catalyst基础之上。
Dataset.scala的collect方法源码:
1. defcollect(): Array[T] = collect(needCallback = true)
进入collect(needCallback = true)方法:
1. private def collect(needCallback: Boolean):Array[T] = {
2. def execute(): Array[T] =withNewExecutionId {
3. queryExecution.executedPlan.executeCollect().map(boundEnc.fromRow)
4. }
5.
6. if (needCallback) {
7. withCallback("collect",toDF())(_ => execute())
8. } else {
9. execute()
10. }
<