自定義case class,採用以下方式生成parquet文件,其Repetition爲optional
case class Log(id:String)
ds[Log].write.parquet(path)
業務上,後面使用parquet文件要求Repetition爲required。直接讀取會報錯。
org.apache.parquet.io.InvalidRecordException: optional StringType id found: expected required StringType id
解決方式 :自定義schema,nullable參數設置爲false,創建DF寫入。
val schema:StructType = StructType(
Array(
StructField("id",StringType,false)
)spark.createDataFrame(rdd,schema).write.parquet(path)
需要注意的是,schema的聲明只是爲了輔助spark sql來做一些規則校驗和避免一些不必要的錯誤,spark寫入parquet文件後,spark依舊強制將nullable設置爲true。
spark.read.parquet(path); nullable依舊爲true