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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS Glue ETL作业缺少对爬网程序可见的字段相关的知识,希望对你有一定的参考价值。

我有一个由爬虫创建的表,指向存储在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的“输出 - >配置选项(可选)”部分中的“表格中的元数据更新所有新分区和现有分区”?

以上是关于AWS Glue ETL作业缺少对爬网程序可见的字段的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue ETL 作业中的 Boto3 Glue

从 AWS Redshift 到 S3 的 AWS Glue ETL 作业失败

AWS Glue ETL 作业的 Scala 和 Java 版本是啥?

Python/Pyspark 迭代代码(用于 AWS Glue ETL 作业)

手动设置 AWS Glue ETL 书签

AWS Glue 抓取动态 S3 路径位置