我使用 Version1 架构生成了一年多的镶木地板文件。随着最近的架构更改,较新的镶木地板文件具有 Version2 架构额外列。
因此,当我从旧版本和新版本一起加载镶木地板文件并尝试过滤更改的列时,我得到一个异常。
我希望 Spark 读取旧文件和新文件,并在不存在列的情况下填充空值。是否有解决方法,当未找到列时 Spark 填充空值?
SparkSQL 本身支持 parquet 文件的模式合并。您可以阅读所有相关内容官方文档在这里 http://spark.apache.org/docs/latest/sql-programming-guide.html#schema-merging
与 ProtocolBuffer、Avro 和 Thrift 一样,Parquet 也支持 schema
进化。用户可以从简单的架构开始,逐步添加
根据需要向架构添加更多列。这样,用户最终可能会
具有不同但相互兼容的多个 Parquet 文件
模式。 Parquet 数据源现在能够自动检测
这种情况并合并所有这些文件的模式。
由于模式合并是一个相对昂贵的操作,并且不是一个
在大多数情况下,我们默认将其关闭,从
1.5.0。您可以通过以下方式启用它
setting data source option mergeSchema to true when reading Parquet
files (as shown in the examples below), or
setting the global SQL option spark.sql.parquet.mergeSchema to true.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)