Catalyst依靠Scala语言,名为quasiquotes,的特殊功能,使代码生成更简单。 Quasiquotes允许用Scala语言编程构建抽象语法树(AST),然后可以在运行时将其提供给Scala编译器以生成字节码。 下图显示,quasiquotes让我们生成与手动调优程序相似的代码。 ? 我们发现使用quasiquotes进行代码生成是非常简单直接的,我们观察到,即使SparkSql的新贡献者也可以快速添加新类型的表达式的规则。 Quasiquotes可以帮助我们实现很多功能,比如规则引擎。后面也会举例讲解,如何在我们的应用中使用。
在计算机科学中,这种能力被称为准引用(quasiquotes)。
Scala Macro 发展的高峰是 Scala 2.11 版本,增加更多新特性,其中最耀眼的便是QUASIQUOTES,它可以帮助开发者屏蔽编译器底层的细节,很大程度上简化了Macro的编写工作。
Reference Overview Spark SQL的核心是Catalyst优化器,是以一种新颖的方式利用Scala的的模式匹配和quasiquotes机制来构建的可扩展查询优化器。 ?
quasiquotes是最新的AST操作函数集,可以更方便灵活地控制AST的产生、表达式还原等。 在使用quasiquotes时我们一般是在q括号中放入原始代码。在q括号内调用AST变量用$前缀(称为unquote)。对类型tpe的操作可以参考scala.reflect api。
Spark SQL的核心是Catalyst优化器,它以一种新颖的方式利用高级编程语言功能(例如Scala的模式匹配和quasiquotes)来构建可扩展的查询优化器。