[英]How to pass variables into SQL query using Jupyter Notebooks Python
[英]How to pass variables in spark SQL, using python?
我正在用python編寫火花代碼。 如何在 spark.sql 查詢中傳遞變量?
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))
您需要像這樣以字符串格式刪除單引號和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))
您需要做的就是將 s(字符串插值器)添加到字符串中。 這允許將變量直接使用到字符串中。
val q25 = 10
Q1 = spark.sql(s"SELECT col1 from table where col2>500 limit $q25)
如果您經常做這類事情或想讓您的代碼更容易重用,另一種選擇是使用配置變量映射和格式選項:
configs = {"q25":10,
"TABLE_NAME":"my_table",
"SCHEMA":"my_schema"}
Q1 = spark.sql("""SELECT col1 from {SCHEMA}.{TABLE_NAME}
where col2>500
limit {q25}
""".format(**configs))
一個非常簡單的解決方案是將查詢存儲為字符串(使用通常的 Python 格式),然后將其傳遞給spark.sql()
函數:
q25 = 500
query = "SELECT col1 from table where col2>500 limit {}".format(q25)
Q1 = spark.sql(query)
使用 f-Strings 方法(PySpark):
table = 'my_schema.my_table'
df = spark.sql(f'select * from {table}')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.