动态构建Spark SQL查询

use*_*130 5 scala apache-spark apache-spark-sql

我们如何使用Scala中的Spark动态地将列名和操作符名称传递给SQL查询?

我试过(不成功)以下内容:

spark.sql("set key_tbl=mytable")
spark.sql("select count(1) from ${key_tbl}").collect()
Run Code Online (Sandbox Code Playgroud)

arj*_*691 7

您可以将其作为参数传递,如下所示

val param = "tableName" 
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
sqlContext.sql(s"""SELECT * FROM param=$param""")
Run Code Online (Sandbox Code Playgroud)

可以查看此链接了解更多详情 https://forums.databricks.com/questions/115/how-do-i-pass-parameters-to-my-sql-statements.html


ste*_*ino 5

更简单地说,您应该能够执行如下操作:

val key_tbl = "mytable"
spark.sql(s"select count(1) from ${key_tbl}").collect()
Run Code Online (Sandbox Code Playgroud)

请注意查询s字符串之前的内容:这使用 Scala 的字符串插值来使用另一个变量 ( key_tbl) 构建查询。

您可以在此处阅读有关 Scala 中字符串插值的更多信息。