Я пытаюсь создать искру UDF, чтобы извлечь пару (ключ, значение) из класса, определенного пользователем.Схема для типа Any не поддерживается
Функция scala работает нормально, но когда я пытаюсь преобразовать ее в UDF в spark2.0, я сталкиваюсь с ошибкой «Schema for type Any is not support».
case class myType(c1: String, c2: Int)
def getCaseClassParams(cc: Product): Map[String, Any] = {
cc
.getClass
.getDeclaredFields // all field names
.map(_.getName)
.zip(cc.productIterator.to) // zipped with all values
.toMap
}
Но когда я пытаюсь создать экземпляр значения функции как UDF это приводит к следующей ошибке -
val ccUDF = udf{(cc: Product, i: String) => getCaseClassParams(cc).get(i)}
java.lang.UnsupportedOperationException: Schema for type Any is not supported
at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:716)
at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:668)
at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:654)
at org.apache.spark.sql.functions$.udf(functions.scala:2841)