如何将参数传递给 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(""" """)?的主要内容,如果未能解决你的问题,请参考以下文章

将可为空的列作为参数传递给 Spark SQL UDF

jquery动画回调 - 如何将参数传递给回调

如何将我的函数的参数传递给 mvrnorm?

如何将输入参数传递给 AWS Glue Map.apply 函数

如何将参数传递给 erlang os:cmd()?

在 React 中,如何将“this.state”作为参数传递给“socket.on”回调函数?