【问题标题】:AWS Glue custom crawler based on file nameAWS Glue 基于文件名的自定义爬虫
【发布时间】:2018-05-01 18:08:02
【问题描述】:

所以我要做的是使用 AWS Glue 抓取 S3 存储桶上的数据。存储为嵌套 json 和路径的数据如下所示:

s3://my-bucket/some_id/some_subfolder/datetime.json

当运行默认爬虫(无自定义分类器)时,它会根据路径对其进行分区并按预期反序列化 json,但是,我想从文件名中获取时间戳以及在单独的字段中。目前,Crawler 忽略了它。

例如,如果我在以下位置运行爬虫:

s3://my-bucket/10001/fromage/2017-10-10.json

我得到这样的表架构:

  • 分区 1:10001
  • 第 2 部分:源代码
  • 数组:JSON 数据

我确实尝试添加基于 Grok 模式的自定义分类器:

%{INT:id}/%{WORD:source}/%{TIMESTAMP_ISO8601:timestamp}

但是,每当我重新运行爬虫时,它都会跳过自定义分类器并使用默认的 JSON 分类器。作为一种解决方案,显然我可以在运行爬虫之前将文件名附加到 JSON 本身,但想知道我是否可以避免这一步?

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-athena aws-glue


    【解决方案1】:

    分类器只分析文件中的数据,而不是文件名本身。你想做的事在今天是不可能的。如果您可以更改文件所在的路径,则可以将日期添加为另一个分区:

    s3://my-bucket/id=10001/source=fromage/timestamp=2017-10-10/data-file-2017-10-10.json
    

    【讨论】:

    • 分类器不仅分析数据,还根据相对路径添加分区。因此,只是希望可以抓取它,而不是通过自定义 Map Reduce 执行此任务
    • 我找不到任何参考表明爬虫将分类器应用于找到的文件的相对路径。 AWS 文档表明爬虫(而不是分类器)根据文件的前缀对数据进行分区。
    • 在幻灯片 23 上从这里slideshare.net/AmazonWebServices/…
    • 在那张幻灯片上,它显示了它如何将分区作为算法的一部分来确定数据是否属于同一模式。但这并不意味着将分类器应用于文件路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-21
    • 2020-03-09
    相关资源
    最近更新 更多