AWS Glue ETL作业缺少对爬网程序可见的字段

问题描述 投票:1回答:3

我有一个由爬虫创建的表,指向存储在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试图推断自己的架构,而不是使用爬虫找到的架构。

python amazon-web-services pyspark aws-glue
3个回答
0
投票

你有没有试过.create_dynamic_frame.from_options并直接从s3桶读取?有时行为与Crawler不同。


0
投票

对于镶木地板文件,Glue使用Spark的读取器,因此依赖于从文件继承的模式,而不是使用爬虫创建的数据目录中的模式。

如果源文件夹包含具有不同模式的文件,则Glue crawler将其合并为单个模式,这使其与您在ETL中看到的模式不同。


0
投票

您是否尝试过使用Crawler的“输出 - >配置选项(可选)”部分中的“表格中的元数据更新所有新分区和现有分区”?

© www.soinside.com 2019 - 2024. All rights reserved.