カスタム Estimator の transformSchema メソッドの場合、入力データ フレームのスキーマをケース クラスで定義されたスキーマと比較できる必要があります。通常、これは、以下に概説するように、ケース クラスから Spark StructType / Schema を生成するように実行できます。ただし、間違った nullability が使用されています。
によって推論される 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
、ケース クラスから手動で推論された新しいスキーマが nullable に設定されているため、これは常に生成されますtrue
(ja java.Integer が実際には null である可能性があるため)。
root
|-- CUSTOMER_ID: integer (nullable = true)
nullable = false
スキーマの作成時にどのように指定できますか?