AWS Glue Crawler 将 json 文件分类为 UNKNOWN

Posted

技术标签:

【中文标题】AWS Glue Crawler 将 json 文件分类为 UNKNOWN【英文标题】:AWS Glue Crawler Classifies json file as UNKNOWN 【发布时间】:2018-04-06 19:08:05 【问题描述】:

我正在从事一项 ETL 作业,该作业会将 JSON 文件提取到 RDS 暂存表中。我配置的爬虫可以对小于 1MB 的 JSON 文件进行分类。如果我缩小文件(而不是漂亮的打印),如果结果小于 1MB,它将毫无问题地对文件进行分类。

我无法想出解决方法。我尝试将 JSON 转换为 BSON 或 GZIPing JSON 文件,但它仍然被归类为 UNKNOWN。

还有其他人遇到过这个问题吗?有一个更好的方法吗?

【问题讨论】:

谢谢,我被困了几个小时,删除缩进修复了它。 我也有同样的问题。你能给我更多关于这些缩进的细节吗?在哪里以及如何? 【参考方案1】:

我有两个 json 文件,分别为 42mb 和 16mb,在 S3 上分区为路径:

s3://bucket/stg/year/month/_0.json

s3://bucket/stg/year/month/_1.json

我遇到了和你一样的问题,爬虫分类为 UNKNOWN。

我能够解决它:

您必须使用 jsonPath 作为“$[*]”创建自定义分类器,然后使用分类器创建新的爬虫。 使用 S3 上的数据运行新的爬虫,并创建适当的架构。 不要使用分类器更新您当前的爬虫,因为它不会应用更改,我不知道为什么,可能是因为他们的文档中提到的分类器版本控制 AWS。创建新的爬虫让它们工作

【讨论】:

不幸的是,这对我不起作用。我能够重现文件 1mb 被保留为UNKNOWN 的问题。您提供的 JSON 路径用于处理包含 JSON 数组的文件,这与我的情况无关,因为我们的每个文件都包含一个对象。 如果您更改分类器定义,之前使用分类器抓取的任何数据都不会重新分类。使用更新的分类器对新数据进行分类,这可能导致更新的模式。 Learn more【参考方案2】:

中所述

https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-json

当您使用内置 JSON 分类器运行爬虫时,整个文件用于定义架构。因为没有指定 JSON 路径,爬虫把数据当作一个对象,也就是一个数组。

Dung 在他的回答中也指出了这一点。

【讨论】:

【参考方案3】:

另请注意,文件编码可能导致 JSON 被归类为 UNKNOWN。请尝试将文件重新编码为 UTF-8。

【讨论】:

难道没有其他方法可以让胶水读取其他编码的文件吗?重新编码似乎太多了

以上是关于AWS Glue Crawler 将 json 文件分类为 UNKNOWN的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue Crawler 为每个分区添加表?

如何使用 AWS Glue Crawler 读取 PostgreSQL 表分区?

AWS Glue Crawler无法提取CSV标头

使用CloudFormation上的JdbcTargets指定Glue :: Crawler

通过 AWS Glue Crawler 识别并存储在数据目录中的表的异常

AWS Athena 从 S3 的 GLUE Crawler 输入 csv 创建的表中返回零记录