Для пользовательского метода transformSchema Estimator мне нужно иметь возможность сравнивать схему фрейма входных данных со схемой, определенной в классе case. Обычно это может быть выполнено следующим образом: класс case, как описано ниже. Однако используется неправильная обнуляемость:
Реальная схема df, выведенная spark.read.csv().as[MyClass]
, может выглядеть так:
root
|-- CUSTOMER_ID: integer (nullable = false)
И класс случая:
case class MySchema(CUSTOMER_ID: Int)
Для сравнения я использую:
val rawSchema = ScalaReflection.schemaFor[MySchema].dataType.asInstanceOf[StructType]
if (!rawSchema.equals(rawDf.schema))
К сожалению, это всегда дает false
, так как новая схема, выводимая вручную из класса case, устанавливает значение nullable в true
(потому что ja java.Integer на самом деле может быть нулевым)
root
|-- CUSTOMER_ID: integer (nullable = true)
Как я могу указать nullable = false
при создании схемы?