如何利用Spark 2.0“全阶段代码生成”

时间:2017-02-15 19:12:34

标签: scala apache-spark compilation apache-spark-sql

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

Q1。 Python或R可以利用这种技术吗?  Q2。在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))

Q3。如果Q2案例1能够利用“整阶代码生成”,我们如何从外部文件读取查询字符串,如:

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

在上面的代码中,编译器真的不知道查询字符串是什么样的,在编译阶段,它是否可以使用“整阶代码生成”技术?

1 个答案:

答案 0 :(得分:0)

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

  2. 支持SQL和DataFrame API,它们提供查询的方式并不重要。 Codegen是在用户输入和查询执行之间应用的内部过程。