Я пытаюсь определить UserDefinedType на основе String, но отличается от StringType в Spark 2.4.1, но похоже, что в Spark есть ошибка или я что-то делаю неправильно.
Я определяю свой тип какследует:
class MyType extends UserDefinedType[MyValue] {
override def sqlType: DataType = StringType
...
}
@SQLUserDefinedType(udt = classOf[MyType])
case class MyValue
Я ожидаю, что он будет прочитан и сохранен в виде строки только с пользовательским типом SQL.На самом деле Spark вообще не может прочитать строку:
java.lang.ClassCastException: org.apache.spark.sql.execution.datasources.csv.UnivocityParser$$anonfun$makeConverter$11 cannot be cast to org.apache.spark.unsafe.types.UTF8String
at org.apache.spark.sql.catalyst.expressions.BaseGenericInternalRow$class.getUTF8String(rows.scala:46)
at org.apache.spark.sql.catalyst.expressions.GenericInternalRow.getUTF8String(rows.scala:195)
at org.apache.spark.sql.catalyst.expressions.JoinedRow.getUTF8String(JoinedRow.scala:102)
Я думаю, что проблема в UnivocityParser.makeConverter, который не возвращает функцию (String => Any), но (String => (String =)> Любой)) в случае UDT