提问者:小点点

拼花地板中的火花读取缺失列


我有我需要从火花读取的镶木地板文件。有些文件缺少几列,这些列存在于新文件中。

由于我不知道哪些文件缺少列,我需要读取火花中的所有文件。我有我需要读取的列列表。也可能是所有文件都缺少一些列的情况。我需要在那些缺少的列中放一个空。

当我尝试执行sqlContext. sql('query')时,它会给我错误提示缺少列

如果我定义模式并执行

sqlContext.read. parquet('s 3://……').schema(parquet_schema)

它给我同样的错误。

帮帮我这里


共1个答案

匿名用户

您需要使用拼花架构演进策略来解决这种情况。

根据火花留档的定义

用户可以从一个简单的模式开始,并根据需要逐渐向模式添加更多列。这样,用户最终可能会得到多个具有不同但相互兼容模式的Parquet文件。Parquet数据源现在能够自动检测这种情况并合并所有这些文件的模式。

你需要做的就是

val mergedDF = spark.read.option("mergeSchema", "true").parquet("'s3://....'")

这将为您提供具有完整架构的镶木地板数据。

痛点

如果您的架构不兼容,例如,一个拼花文件的col1DataType为String,另一个拼花文件的col1DataType为Long

然后合并架构将失败。