/ / Spark error: Непідтримуваний тип літерала sql.catalyst.expressions.GenericRowWithSchema - scala, apache-spark, spark-dataframe

Справжня помилка: непідтримуваний буквальний тип класу sql.catalyst.expressions.GenericRowWithSchema - scala, apache-іскр, іскр-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))