首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递参数引发sql问题

传递参数引发sql问题
EN

Stack Overflow用户
提问于 2022-10-26 17:35:58
回答 1查看 31关注 0票数 0

我正试图在火花中转换到下面

代码语言:javascript
复制
val forX=spark.sql(""" select *  from abc where tv='Dish' and to_date(acd)>='2022-10-11 where  indicator ='X' """)
val forY=spark.sql(""" select *  from abc where tv='Dish' and to_date(acd)>='2022-10-11 where  indicator ='Y' """)
val forZ=spark.sql(""" select *  from abc where tv='Dish' and to_date(acd)>='2022-10-11 where  indicator ='Z' """)

the above dataframe gives out as


val Mylist:List[String]=List("X","Y","S","I")

for (i <- Mylist)
   val eindicator =spark.sql(""" select * from abc where tv="Dish" and to_date(acd)>='2022-10-11'
and indicator=${i} """)

println("#############",eindicator)

它的赋值无法解析输入列中的“X”

有什么建议吗?如何传递这个$i值?

EN

回答 1

Stack Overflow用户

发布于 2022-10-27 10:50:09

将指示符值用单引号包装,这样SQL分析器就可以看到i是字符串文本,而不是列名。

请参阅火花壳中的以下示例。

代码语言:javascript
复制
scala> Seq(("value1", 1), ("value2", 2), ("value3", 3)).toDF("value1", "value2").createOrReplaceTempView("t")
scala> spark.sql("select * from t").show
+------+------+
|value1|value2|
+------+------+
|value1|     1|
|value2|     2|
|value3|     3|
+------+------+
scala> spark.sql("select * from t where value1 = value2").show // Show me rows with the value in the first column equal to the value in the second column.
+------+------+
|value1|value2|
+------+------+
+------+------+
scala> spark.sql("select * from t where value1 = 'value2'").show  // Show me rows with the value in the first column equal to the string literal 'value2'.
+------+------+
|value1|value2|
+------+------+
|value2|     2|
+------+------+

有关更多信息,请参见在SQL中单引号和双引号有什么区别?讨论。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74211964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档