使用向后兼容的架构读取 Spark 中的旧数据



我已经将一些较旧的数据存储在镶木地板中,其模式由

case class A(name: String)

我想在

case class B(name: String, age: Option[Int])

并将旧数据和新数据读入同一DataFrame.每次我尝试使用 spark.read.parquet("test_path").as[B].collect() 读取数据时,我都会收到以下异常:

线程"main"中的异常 org.apache.spark.sql.AnalysisException: 无法解析给定输入列的"年龄": [name];

有没有办法为我的所有数据指定向后兼容的架构?

为了

读取具有向后兼容模式的旧数据,仅仅指定新的Encoder是不够的,您必须手动为DataSet指定StructType,并且不要让Spark根据其中任何一个来推断它。这样,在转换为DataFrame期间就不会缺少字段:

spark.read.schema(Encoders.product[B].schema).parquet("test").as[B].collect()

相关内容

  • 没有找到相关文章

最新更新