激发阅读镶木地板中缺失的列

Nip*_*pun 1 apache-spark parquet

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

由于我不知道哪些文件缺少列,因此我需要读取 spark 中的所有文件。我有需要阅读的列列表。也可能是所有文件都缺少某些列。我需要在那些缺失的列中放置一个空值。

当我尝试做一个时, sqlContext.sql('query')它给我错误说缺少列

如果我定义架构并执行

sqlContext.read.parquet('s3://....').schema(parquet_schema)

它给了我同样的错误。

在这里帮助我

Avi*_*rya 8

您需要使用 Parquet 模式演变策略来解决这种情况。

如火花文档中所定义

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

你需要做的就是

val mergedDF = spark.read.option("mergeSchema", "true").parquet("'s3://....'")
Run Code Online (Sandbox Code Playgroud)

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

痛点

如果您的架构不兼容,例如一个镶木地板文件的col1DataType asString和另一个镶木地板文件的col1DataType as Long

然后合并模式将失败。