Помилка іскри: Непідтримуваний тип літерала sql.catalyst.expressions.GenericRowWithSchema
val crimeDF = spark.read.option("header", "true").csv("crime_data.csv")
crimeDF.show(5)
var a = crimeDF.select(max($"IncidntNum")).take(1)
println(a(0).toString)
a: Array[org.apache.spark.sql.Row] = Array([991309046])
[991309046]
Я виконую цю команду:
crimeDF.where($"IncidntNum ===" +a(0))
але отримавши цю помилку:
java.lang.RuntimeException: Unsupported literal type class org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema [991309046]
at org.apache.spark.sql.catalyst.expressions.Literal$.apply(literals.scala:77)
at org.apache.spark.sql.catalyst.expressions.Literal$$anonfun$create$2.apply(literals.scala:163)
at org.apache.spark.sql.catalyst.expressions.Literal$$anonfun$create$2.apply(literals.scala:163)
at scala.util.Try.getOrElse(Try.scala:79)
at org.apache.spark.sql.catalyst.expressions.Literal$.create(literals.scala:162)
at org.apache.spark.sql.functions$.typedLit(functions.scala:112)
at org.apache.spark.sql.functions$.lit(functions.scala:95)
at org.apache.spark.sql.Column.$plus(Column.scala:648)
... 76 elided
Відповіді:
3 для відповіді № 1Ви намагаєтеся пройти цілий Row
як літерал. Витягніть значення з рядка перед використанням у наступних запитах:
crimeDF.where($"IncidntNum" === a(0).getInt(0))
або
crimeDF.where($"IncidntNum" === a(0).getString(0))
залежно від того, чи є ці числа у вашому виході Int
S або String
с
1 для відповіді № 2
Ви повинні робити
var a = crimeDF.select(max($"IncidntNum")).take(1)(0).getAs[Int](0)
і потім
crimeDF.where($"IncidntNum" === a)
або
crimeDF.where($"IncidntNum" === lit(a))