spark 读取的parquet文件schema改变了如何处理

当用spark.read.parquet("filepath").as[MyClass]时候,如果被读取的文件schema变了,比如增加了两列,这个时候直接读取会报错,那么有一种变通的方法就是spark.read.parquet("filepath").map(e=> val field = 
if (e.isNullAt(e.fieldIndex("field"))) null else e.getAs[String]("
field")
MyClass

})这种形式,也就是通过判断字段存在不存在做处理,否则会直接报异常

org.apache.spark.sql.AnalysisException: No such struct field 

更简便的方法是加上option.通过schema合并即可

spark.read.option("mergeSchema", "true").parquet(xxx).as[MyClass]

ref:http://spark.apache.org/docs/latest/sql-programming-guide.html#schema-merging

猜你喜欢

转载自blog.csdn.net/zhouyan8603/article/details/80451471
今日推荐