如何在Apache Spark SQL中綁定變量?例如:動態綁定Spark SQL中的變量/參數?
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlContext.sql("SELECT * FROM src WHERE col1 = ${VAL1}").collect().foreach(println)
如何在Apache Spark SQL中綁定變量?例如:動態綁定Spark SQL中的變量/參數?
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlContext.sql("SELECT * FROM src WHERE col1 = ${VAL1}").collect().foreach(println)
您是否正在尋找在同一個程序/殼從傳遞變量,如果是的話它是這樣的:
val VAL1 = "testcol"
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
sqlContext.sql(s"SELECT * FROM src WHERE col1 = $VAL1").collect().foreach(println)
星火SQL(如1.6版本)不支持綁定變量。
ps。 Ashrith建議的不是一個綁定變量。你每次都在構造一個字符串。 Evey時間Spark將解析查詢,創建執行計劃等。綁定變量的目的(例如在RDBMS系統中)是爲了縮短構建執行計劃的時間。它必須有一個特殊的API來「綁定」變量。 Spark沒有這個功能(截至今天,Spark 1.6版本)。
我在Spark shell 2.0.x shell和Thrift(直線)中進行了驗證。我可以使用set
命令將Spark SQL查詢中的變量綁定。
查詢而不綁定變量:
select count(1) from mytable;
查詢與綁定變量(參數):
1.火花SQL殼
set key_tbl=mytable; -- setting mytable to key_tbl to use as ${key_tbl} select count(1) from ${key_tbl};
2.火花殼
spark.sql("set key_tbl=mytable") spark.sql("select count(1) from ${key_tbl}").collect()
兩個瓦特/ w.o結合PARAMS查詢將返回相同的結果。
注意:不要給鑰匙的任何報價,因爲它的表名在這裏。
讓我知道是否有任何問題。
with val slqDF = spark.sql(「select count(*)from Prd_IN_GeneralEvents where pdid like $'{id}'」)同樣的錯誤 – earl 2017-07-13 15:46:03
@jam:嘗試打印SELECT語句而不是運行它。你會知道,查詢是如何形成的。 – mrsrinivas 2017-07-13 15:50:30
Pyspark
sqlContext.sql("SELECT * FROM src WHERE col1 = {1} and col2 = {2}".format(VAL1,VAL2).collect().foreach(println)
由於其工作。 – user3769729 2014-11-07 05:47:42
我不知道爲什麼這是投下來的,它在Spark 1.5.2中對我有用。謝謝@Ashrith – 2015-12-09 17:37:37
它不是一個綁定變量..你每次都在構造一個字符串。 Evey時間Spark將解析查詢,創建執行計劃等。綁定變量的目的(例如在RDBMS系統中)是爲了縮短構建執行計劃的時間。它必須有一個特殊的API來「綁定」變量。 Spark沒有這個功能(截至今天,Spark 1.6版本)。 – Tagar 2016-04-12 13:42:58