apachesparksql从SQL查询获取数据帧中的值

apachesparksql从SQL查询获取数据帧中的值,sql,scala,apache-spark,Sql,Scala,Apache Spark,我正在尝试使用Apache Spark 2.2.0从SQL查询中获取字符串值,如下所示: val result = spark.sql("SELECT AnswerText FROM datatable WHERE participantUUID='010A0550' AND assessmentNumber=0 AND Q_id_string = '1_Age'") assertResult("23") { result.collect.head.getString(0) } 我得到以

我正在尝试使用Apache Spark 2.2.0从SQL查询中获取字符串值,如下所示:

val result = spark.sql("SELECT AnswerText FROM datatable WHERE participantUUID='010A0550' AND assessmentNumber=0 AND Q_id_string = '1_Age'")

assertResult("23") {
  result.collect.head.getString(0)
}
我得到以下例外情况:

next on empty iterator
java.util.NoSuchElementException: next on empty iterator

我尝试了
collectAsList
返回一行,但也没有从中得到任何乐趣。我只想从DataFrame中的查询返回实际值,而不是列、行或字段。在本例中,结果是一个字符串,但也可能是一个int-人的年龄=23。

这可能是因为查询不返回任何项目。最好使用
headOption

assertResult(Some("23")) {
  result.take(1).headOption.map(_.getAs[String]("AnswerText"))
}
或者将其推送到SQL:

assertResult(1) {
  spark
    .sql("""SELECT AnswerText 
            FROM datatable 
            WHERE participantUUID='010A0550' AND 
                  assessmentNumber=0 AND
                  Q_id_string = '1_Age'""")
   .where($"AnswerText" === "23").count 
}