spark中的变量未绑定值

p4tfgftt  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(434)

我传递变量,但它不是传递值。
我在这里填充变量值。

val Temp = sqlContext.read.parquet("Tabl1.parquet")
Temp.registerTempTable("temp")

val year = sqlContext.sql("""select value  from Temp where name="YEAR"""")
year.show()

这里是年份。show()的正确值。
我在下面的代码中传递参数。

val data = sqlContext.sql("""select count(*) from Table where Year='$year' limit 10""")
data.show()
liwlm1x9

liwlm1x91#

价值 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 用那种类型。

相关问题