【发布时间】:2017-04-11 08:11:30
【问题描述】:
对于自定义 Estimator 的 transformSchema 方法,我需要能够将输入数据框的模式与案例类中定义的模式进行比较。通常这可以像Generate a Spark StructType / Schema from a case class 一样执行,如下所述。但是,使用了错误的可空性:
spark.read.csv().as[MyClass] 推断的 df 的真实架构可能如下所示:
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?
【问题讨论】:
标签: apache-spark apache-spark-sql apache-spark-ml apache-spark-dataset spark-csv