对于自定义 Estimator 的 transformSchema 方法,我需要能够将输入数据框的模式与案例类中定义的模式进行比较。通常这可以像从案例类中生成 Spark StructType / Schema一样执行,如下所述。但是,使用了错误的可空性:
由 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
,因为从案例类手动推断的新模式设置为可空true
(因为 ja java.Integer 实际上可能为空)
root
|-- CUSTOMER_ID: integer (nullable = true)
nullable = false
创建架构时如何指定?