为什么添加到拼花地板表的新列不能从glue pyspark ETL作业中获得?
我们一直在探索使用Glue将一些JSON数据转换为拼花地板。我们尝试的一个场景是在拼花地板表中添加一列。所以分区1有列[A],分区2有列[A,B]。然后我们想编写更多的Glue ETL作业来聚合拼花地板表,但新列不可用。使用为什么添加到拼花地板表的新列不能从glue pyspark ETL作业中获得?,pyspark,parquet,aws-glue,Pyspark,Parquet,Aws Glue,我们一直在探索使用Glue将一些JSON数据转换为拼花地板。我们尝试的一个场景是在拼花地板表中添加一列。所以分区1有列[A],分区2有列[A,B]。然后我们想编写更多的Glue ETL作业来聚合拼花地板表,但新列不可用。使用glue\u context.create\u dynamic\u frame.from\u catalog加载动态框架,我们的新列从未出现在架构中 我们为我们的表爬虫尝试了几种配置。所有分区使用单一模式,s3路径使用单一模式,每个分区使用单一模式。我们总是可以在Glue表数
glue\u context.create\u dynamic\u frame.from\u catalog
加载动态框架,我们的新列从未出现在架构中
我们为我们的表爬虫尝试了几种配置。所有分区使用单一模式,s3路径使用单一模式,每个分区使用单一模式。我们总是可以在Glue表数据中看到新列,但是如果我们使用pyspark从Glue作业中查询它,它总是空的。当我们下载一些样本并通过雅典娜查询时,专栏就在拼花地板上
为什么pyspark无法使用新列?这是一个spark配置问题。发件人: 与ProtocolBuffer、Avro和Thrift一样,Parquet也支持模式演化。用户可以从一个简单的模式开始,然后根据需要逐渐向该模式添加更多的列。通过这种方式,用户可能最终得到具有不同但相互兼容模式的多个拼花文件。拼花数据源现在能够自动检测这种情况并合并所有这些文件的模式 由于模式合并是一个相对昂贵的操作,并且在大多数情况下不是必需的,因此我们从1.5.0开始默认关闭它。您可以通过以下方式启用它:
spark.conf.set(“spark.sql.parquet.mergeSchema”,“true”)上设置选项
附加_选项中将mergeSchema
设置为true李>
source=glueContext.create\u dynamic\u frame.from\u catalog(
database=“db”,
table_name=“table”,
其他_选项={“mergeSchema”:“true”}
)
之后,新列在框架的模式中可用