如何利用 Spark 2.0 "whole-stage code generation"



我一直在阅读许多关于Spark 2.0"全阶段代码生成"的文章。由于该技术在编译阶段优化了代码,因此我对此有几个问题:

问题 1.Python或R可以利用这种技术吗? 问题 2.在 Scala/Java 中,如何利用这种技术?我应该使用 Spark 的 API 引入所有查询,还是只有一个字符串查询就足够了?例如,以下每个程序是否可以利用"全阶段代码生成":

案例1:

sparksession.sql("select * from a john b on a.id = b.id")

案例2:

val talbe_a = sparksession.sql("select * from a)
val table_b = sparksession.sql("select * from b)
val table_c = table_a.join(table_b, table_a(COL_ADID) === table_b(COL_ADID))

问题 3.如果 Q2 案例 1 能够利用"全阶段代码生成",那么我们如何从外部文件中读取查询字符串,如下所示:

val query = scala.io.Source.fromFile(queryfile).mkString
sparksession.sql(query)

在上面的代码中,编译者真的不知道查询字符串是什么样子的,在编译阶段,它能利用"全阶段代码生成"技术吗?

  1. 所有使用 Spark SQL API 的语言都可以从 codegen 中受益,只要它们不使用特定于语言的扩展(Python UDF、dapplygapplyin R)

  2. SQL 和DataFrameAPI 都受支持,它们提供查询的方式无关紧要。Codegen 是应用在用户输入和查询执行之间的内部过程。

最新更新