Spark寫入parquet,設置Repetition。解決org.apache.parquet.io.InvalidRecordException

自定義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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章