/ / Грешка на искра: Неподдържан клас буквално тип sql.catalyst.expressions.GenericRowWithSchema - scala, apache-spark, spark-dataframe

Грешка при искра: Неподдържан клас буквал тип sql.catalyst.expressions.GenericRowWithSchema - scala, apache-spark, scar-dataframe

Грешка при искра: Неподдържан буквален клас клас 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))

в зависимост от това дали тези числа в продукцията ви са Ints или Stringс.


1 за отговор № 2

Трябва да се правиш

var a = crimeDF.select(max($"IncidntNum")).take(1)(0).getAs[Int](0)

и тогава

crimeDF.where($"IncidntNum" === a)

или

crimeDF.where($"IncidntNum" === lit(a))