我了解了一个数据帧对象上名为queryExecution的变量,并在控制台的输出中找到了它。但它不确定它有什么帮助。请在控制台中找到输出。
scala> df.queryExecution
res5: org.apache.spark.sql.SQLContext#QueryExecution =
== Parsed Logical Plan ==
Project [_1#0 AS ID#2,_2#1 AS Token4#3]
LocalRelation [_1#0,_2#1], [[1,a],[2,b]]
== Analyzed Logical Plan ==
ID: int, Token4: string
Project [_1#0 AS ID#2,_2#1 AS Token4#3]
LocalRelation [_1#0,_2#1], [[1,a],[2,b]]
== Optimized Logical Plan ==
LocalRelation [ID#2,Token4#3], [[1,a],[2,b]]
== Physical Plan ==
LocalTableScan [ID#2,Token4#3], [[1,a],[2,b]]
Code Generation: true
感谢
为了实现Spark SQL,Spark基于Scala中的函数式编程结构实现了一个可扩展的优化器Catalyst
。
Catalyst的核心包含一个通用库,用于表示树并应用规则来操作它们。
在这个框架之上,构建了用于关系查询处理的特定库(例如,表达式、逻辑查询计划),以及处理查询执行的不同阶段的几组规则:分析、逻辑优化、物理规划和代码生成,以将部分查询编译为Java字节码。
因此,queryExecution
是数据集/DataFrame的一个组成部分,它表示将创建和转换数据的查询执行。
我们主要使用它来调试和优化转换。
您可以在以下博客文章中阅读更多关于Catalyst的介绍,深入了解Spark SQL的Catalyst Optimizer,也可以在@JacekLaskowski的《掌握Apache Spark》中阅读:
-
查询执行。
-
调试查询执行。