如何将参数传递给 spark.sql(""" """)?
Posted
技术标签:
【中文标题】如何将参数传递给 spark.sql(""" """)?【英文标题】:How do I pass parameters to 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'
【问题讨论】:
【参考方案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注入。以上是关于如何将参数传递给 spark.sql(""" """)?的主要内容,如果未能解决你的问题,请参考以下文章