2014-11-05 2462 views

回答

1

您是否正在尋找在同一個程序/殼從傳遞變量,如果是的話它是這樣的:

val VAL1 = "testcol" 
val sqlContext = new org.apache.spark.sql.SQLContext(sc) 
sqlContext.sql(s"SELECT * FROM src WHERE col1 = $VAL1").collect().foreach(println) 
+0

由於其工作。 – user3769729 2014-11-07 05:47:42

+2

我不知道爲什麼這是投下來的,它在Spark 1.5.2中對我有用。謝謝@Ashrith – 2015-12-09 17:37:37

+6

它不是一個綁定變量..你每次都在構造一個字符串。 Evey時間Spark將解析查詢,創建執行計劃等。綁定變量的目的(例如在RDBMS系統中)是爲了縮短構建執行計劃的時間。它必須有一個特殊的API來「綁定」變量。 Spark沒有這個功能(截至今天,Spark 1.6版本)。 – Tagar 2016-04-12 13:42:58

2

星火SQL(如1.6版本)不支持綁定變量。

ps。 Ashrith建議的不是一個綁定變量。你每次都在構造一個字符串。 Evey時間Spark將解析查詢,創建執行計劃等。綁定變量的目的(例如在RDBMS系統中)是爲了縮短構建執行計劃的時間。它必須有一個特殊的API來「綁定」變量。 Spark沒有這個功能(截至今天,Spark 1.6版本)。

3

我在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查詢將返回相同的結果。

注意:不要給鑰匙的任何報價,因爲它的表名在這裏。

讓我知道是否有任何問題。

+0

with val slqDF = spark.sql(「select count(*)from Prd_IN_GeneralEvents where pdid like $'{id}'」)同樣的錯誤 – earl 2017-07-13 15:46:03

+0

@jam:嘗試打印SELECT語句而不是運行它。你會知道,查詢是如何形成的。 – mrsrinivas 2017-07-13 15:50:30

0

Pyspark

sqlContext.sql("SELECT * FROM src WHERE col1 = {1} and col2 = {2}".format(VAL1,VAL2).collect().foreach(println)