我有一个由爬虫创建的表,指向存储在s3中的一些镶木地板文件。从Glue数据目录GUI中我可以看到许多字段(53)。
当我打开一个ETL开发端点并连接一个sagemaker笔记本,加载同一个表并运行printSchema时,我看到使用下面代码的字段数少了很多(36)。
from pyspark.context import SparkContext
from awsglue.context import GlueContext, DynamicFrame
# Get the right stuff
glueContext = GlueContext(SparkContext.getOrCreate())
data = glueContext.create_dynamic_frame.from_catalog(database = "my_database", table_name = "my_table")
print('Fields: ', len(data.schema().fields))
data.printSchema()
只返回36个字段。谁能告诉我如何访问丢失的字段?它似乎最常发生在人口稀少的字段上。
编辑:AWS论坛上的This unanswered question似乎是由于同样的问题 - 显然PySpark试图推断自己的架构,而不是使用爬虫找到的架构。
你有没有试过.create_dynamic_frame.from_options
并直接从s3桶读取?有时行为与Crawler不同。
对于镶木地板文件,Glue使用Spark的读取器,因此依赖于从文件继承的模式,而不是使用爬虫创建的数据目录中的模式。
如果源文件夹包含具有不同模式的文件,则Glue crawler将其合并为单个模式,这使其与您在ETL中看到的模式不同。
您是否尝试过使用Crawler的“输出 - >配置选项(可选)”部分中的“表格中的元数据更新所有新分区和现有分区”?