2017-06-16 53 views
2

我正在python中編寫spark代碼。 如何在spark.sql查詢中傳遞一個變量?如何在Spark中使用python傳遞變量?

q25 = 500 
    Q1 = spark.sql("SELECT col1 from table where col2>500 limit $q25 , 1") 

目前上面的代碼不工作?我們如何傳遞變量?

我也曾經嘗試過,

Q1 = spark.sql("SELECT col1 from table where col2>500 limit q25='{}' , 1".format(q25)) 
+0

你試過了嗎? Q1 = spark.sql(「SELECT col1 from table where col2> 500 limit q25 ='%s',1」%(q25) –

+1

[Python是否有類似「string#{var}」的變量插值)在Ruby?](https://stackoverflow.com/questions/11788472/does-python-has-a-similar-variable-interpolation-like-string-var-in-ruby) –

+0

這只是一個字符串...你'問題不在於Spark –

回答

4

您需要刪除單引號和q25在字符串格式化是這樣的:

Q1 = spark.sql("SELECT col1 from table where col2>500 limit {}, 1".format(q25)) 

更新:基於您的新查詢

spark.sql("SELECT col1 from table where col2>500 order by col1 desc limit {}, 1".format(q25)) 

請注意,SparkSQL不支持OFFSET,因此查詢無法工作。

如果需要添加多個變量,你可以試試這個方法:

q25 = 500 
var2 = 50 
Q1 = spark.sql("SELECT col1 from table where col2>{0} limit {1}".format(var2,q25)) 
+0

這仍然給我不匹配的輸入異常:spark.sql(SELECT col1 from table where col2> 500 order by col1 desc limit {},1「.format(q25)) – Viv

+0

不匹配的輸入對於',' – Viv

+0

SELECT之前,你需要雙引號 –

1

所有你需要做的是S(字符串插值)添加到字符串。這允許直接在字符串中使用變量。

val q25 = 10 
Q1 = spark.sql(s"SELECT col1 from table where col2>500 limit $q25) 
+0

似乎不完整。可能要編輯報價。 –