我有一个由爬虫创建的表,指向存储在s3中的一些拼图文件。从Glue data catalogue GUI中,我可以看到许多字段(53)。
当我打开一个ETL dev端点并连接到一个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个字段。谁能告诉我如何访问缺少的字段?这似乎最常发生在填充稀疏的字段上。
编辑:亚马逊网络服务论坛上的This unanswered question似乎是由于同样的问题-显然PySpark试图推断自己的模式,而不是使用爬虫找到的模式。
发布于 2018-12-19 13:14:05
对于拼图文件,Glue使用Spark的阅读器,因此依赖于从文件继承的模式,而不是使用crawler创建的Data Catalog中的模式。
如果源文件夹包含具有不同模式的文件,那么Glue crawler会将其合并到一个模式中,这使得它与您在ETL中看到的模式不同。
发布于 2018-12-15 03:08:33
你有没有尝试过直接从s3存储桶中读取.create_dynamic_frame.from_options
?有时,它的行为与Crawler不同。
发布于 2018-12-26 14:43:49
您是否尝试过在Crawler的“Output -> Configuration options (Optional)”部分中使用表中的元数据更新所有新的和现有的分区?
https://stackoverflow.com/questions/53744329
复制相似问题