【问题标题】:How do I pass parameters to spark.sql(""" """)?如何将参数传递给 spark.sql(""" """)?
【发布时间】:2020-09-01 18:45:18
【问题描述】:

我想向 spark.sql 传递一个字符串

这是我的查询

mydf = spark.sql("SELECT * FROM MYTABLE WHERE TIMESTAMP BETWEEN '2020-04-01' AND '2020-04-08') 

我想为日期传递一个字符串。

我试过这个代码

val = '2020-04-08'

s"spark.sql("SELECT * FROM MYTABLE WHERE TIMESTAMP  BETWEEN $val  AND '2020-04-08'

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql apache-zeppelin


    【解决方案1】:

    尝试使用 Python 字符串格式 {}.format(val),因为 $val 在 scala 中。

    val = '2020-04-08'
    
    spark.sql("SELECT * FROM MYTABLE WHERE TIMESTAMP  BETWEEN {}  AND '2020-04-08'".format(val)).show()
    

    Example:

    In Pyspark:

    spark.sql("select * from tmp").show()
    #+----+---+
    #|name| id|
    #+----+---+
    #|   a|  1|
    #|   b|  2|
    #+----+---+
    
    id='1'
    
    spark.sql("select * from tmp where id={}".format(id)).show()
    #+----+---+
    #|name| id|
    #+----+---+
    #|   a|  1|
    #+----+---+
    

    In Scala:

    使用string interpolation 替换变量的值

    val id=1
    spark.sql(s"select * from tmp where id=$id").show()
    //+----+---+
    //|name| id|
    //+----+---+
    //|   a|  1|
    //+----+---+
    

    【讨论】:

    • Spark 和 Python 基本上是一回事吗?
    • @Cauder,pyspark 是用于 spark 的 python API,spark-shell 是 scala API。
    • 你能给我看一个来自 PySpark 的多变量吗?
    • 这个方法也可以用于子查询的内部查询吗? spark.sql(s"select * from tmp where id in select (select id from tmp2 where country={}".format(country)))?不确定子查询应该如何引用?
    • 如果id是字符串,可以用于SQL注入。
    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 2012-12-21
    • 2012-01-07
    • 2014-05-03
    • 2015-06-26
    • 2012-01-18
    • 2017-07-14
    • 2018-03-08
    相关资源
    最近更新 更多