我传递变量,但它没有传递值。
我在这里填充变量值。
val Temp = sqlContext.read.parquet("Tabl1.parquet")
Temp.registerTempTable("temp")
val year = sqlContext.sql("""select value from Temp where name="YEAR"""")
year.show()
这里year.show()适当的值。
我在下面的代码中传递参数。
val data = sqlContext.sql("""select count(*) from Table where Year='$year' limit 10""")
data.show()
答案 0 :(得分:1)
值year
是Dataframe
,而不是特定值(Int
或Long
)。因此,当您在字符串插值中使用它时,您将得到Dataframe.toString
的结果,这不是您可以用来比较值的东西(toString返回Dataframe模式的字符串表示)。
如果您认为year
Dataframe的单行包含Int
类型的单个列,并且您希望获得该列的值 - 您可以使用first().getAs[Int](0)
获取该值,然后使用它来构建您的下一个查询:
val year: DataFrame = sqlContext.sql("""select value from Temp where name="YEAR"""")
// get the first column of the first row:
val actualYear: Int = year.first().getAs[Int](0)
val data = sqlContext.sql(s"select count(*) from Table where Year='$actualYear' limit 10")
如果value
表中的Temp
列的类型不同(String
,Long
) - 只需将Int
替换为该类型。