Apache spark 火花读数拼花地板中缺少立柱

Apache spark 火花读数拼花地板中缺少立柱,apache-spark,parquet,Apache Spark,Parquet,我有拼花文件,我需要从spark那里读。某些文件缺少新文件中存在的几列 因为我不知道哪些文件缺少列,所以我需要读取spark中的所有文件。我有我需要阅读的专栏列表。也可能是所有文件都缺少某些列。我需要在缺少的列中输入null 当我试着做一个 sqlContext.sql('query')它告诉我缺少列时出错 如果我定义模式并执行 sqlContext.read.parquet('s3://..).schema(parquet\u schema) 这给了我同样的错误 这里请帮助我您需要使用拼花图案

我有拼花文件,我需要从spark那里读。某些文件缺少新文件中存在的几列

因为我不知道哪些文件缺少列,所以我需要读取spark中的所有文件。我有我需要阅读的专栏列表。也可能是所有文件都缺少某些列。我需要在缺少的列中输入null

当我试着做一个
sqlContext.sql('query')
它告诉我缺少列时出错

如果我定义模式并执行

sqlContext.read.parquet('s3://..).schema(parquet\u schema)

这给了我同样的错误


这里请帮助我

您需要使用拼花图案演变策略来解决这种情况

如spark文档中所定义

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

你需要做的就是

val mergedDF = spark.read.option("mergeSchema", "true").parquet("'s3://....'")
这将为您提供具有完整模式的拼花地板数据

痛点

如果您的模式不兼容,例如,一个拼花地板文件的
col1
数据类型为
String
,另一个拼花地板文件的
col1
数据类型为
Long


然后合并模式将失败。

您需要使用拼花模式演化策略来解决这种情况

如spark文档中所定义

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

你需要做的就是

val mergedDF = spark.read.option("mergeSchema", "true").parquet("'s3://....'")
这将为您提供具有完整模式的拼花地板数据

痛点

如果您的模式不兼容,例如,一个拼花地板文件的
col1
数据类型为
String
,另一个拼花地板文件的
col1
数据类型为
Long


然后合并模式将失败。

我需要读取缺少列(新添加)的拼花地板文件。我无法更改旧文件,因为很多测试用例都会失败。我得到了与op相同的错误。你能帮助我吗?我需要从一个拼花地板文件中读取缺少的列(新添加的)。我无法更改旧文件,因为很多测试用例都会失败。我和op有同样的错误,你能帮我吗?