对于自定义Estimator的transformSchema方法,我需要能够将输入数据框架构与案例类中定义的架构进行比较。通常这可以按如下所述执行,如Generate a Spark StructType/Schema from a case class。然而,错误的为空时:具有正确空性的案例类的Spark模式
的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类手动推断出新的模式被设置为空的,以true
(因为JA java.Integer实际上可能为空)
root
|-- CUSTOMER_ID: integer (nullable = true)
我怎样才能创建模式时指定nullable = false
?