2017-02-15 51 views
0

我一直在閱讀很多關於Spark 2.0「全段代碼生成」的文章。由於該技術在編譯階段優化了代碼,因此我有幾個問題:如何利用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) 

在上面的代碼中,編譯器真的不知道是什麼查詢字符串看起來在編譯階段是否可以利用「全段代碼生成」技術?

回答

0
  1. 使用星火SQL API的所有語言都可以從代碼生成,只要他們不使用特定語言的擴展(Python的UDF,dapplygapply在R)

  2. SQL和DataFrame受益的API支持而他們提供查詢的方式並不重要。 Codegen是在用戶輸入和查詢執行之間應用的內部過程。