Scala 可以触发数据帧';s where子句将变量作为参数?
我正在运行Spark Dataframe中的where子句。当我把字符串变量作为参数时,它会向我抛出一条错误消息。如果我复制该字符串并将其放入查询中,它就会工作Scala 可以触发数据帧';s where子句将变量作为参数?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我正在运行Spark Dataframe中的where子句。当我把字符串变量作为参数时,它会向我抛出一条错误消息。如果我复制该字符串并将其放入查询中,它就会工作 val a = """col("foo")==="bar" || col("abc")==="def"""" val df = df_.where(a) val df = df_.where(col("foo")==="bar" || col("abc")==="def") 如果我尝试不使用变量,它会工作 val a = """co
val a = """col("foo")==="bar" || col("abc")==="def""""
val df = df_.where(a)
val df = df_.where(col("foo")==="bar" || col("abc")==="def")
如果我尝试不使用变量,它会工作
val a = """col("foo")==="bar" || col("abc")==="def""""
val df = df_.where(a)
val df = df_.where(col("foo")==="bar" || col("abc")==="def")
如果表达式是字符串,则它应该是语法上有效的SQL,即
"""foo = 'bar' AND abc = 'def'"""
不是作为
字符串
,但您可以将where
条件保存为列
类型值,如下所示:
import org.apache.spark.sql.functions._
import org.apache.spark.sql.Column
val df = Seq(
("bar", "x"), ("zz", "y"), ("mm", "def")
).toDF("foo", "abc")
val cond: Column = col("foo") === "bar" || col("abc") === "def"
df.where(cond).show
// +---+---+
// |foo|abc|
// +---+---+
// |bar| x|
// | mm|def|
// +---+---+