簡體   English   中英

如何使用 python 在 spark SQL 中傳遞變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM