我有拼花文件,我需要从火花读。有些文件中缺少几个列,这些列在新文件中存在。
由于我不知道哪些文件缺少列,我需要读取所有的文件在火花。我有需要阅读的列的列表。也可能是因为所有的文件都缺少一些列。我需要在那些缺少的列中放一个空。
当我尝试做一个sqlContext.sql('query')时,它会让我错误地说列丢失了
如果我定义架构并执行
sqlContext.read.parquet('s3://....').schema(parquet_schema)
这也给了我同样的错误。
在这里帮我
发布于 2018-09-15 08:47:47
您需要使用拼花模式进化策略来解决这种情况。
如火花文档中所定义的那样
用户可以从一个简单的模式开始,并在需要时逐步向模式添加更多列。这样,用户最终可能会得到多个Parquet文件,这些文件具有不同但相互兼容的模式。Parquet数据源现在能够自动检测这种情况并合并所有这些文件的架构。
你要做的就是
val mergedDF = spark.read.option("mergeSchema", "true").parquet("'s3://....'")这将为您提供完整模式的拼花数据。
痛点
如果您的模式不兼容,例如,一个拼花文件有col1 DataType作为String,而另一个拼图文件有col1 DataType作为Long。
那么合并架构将失败。
https://stackoverflow.com/questions/52341905
复制相似问题