如何在AWS Glue中将JSON与平面结构关联起来

时间:2018-01-12 18:46:59

标签: python amazon-web-services pyspark spark-dataframe aws-glue

尝试压缩具有两个地图/字典字段(custom_event1和custom_event2)的输入JSON数据,该字段可能包含任何键值对数据。为了从数据框创建输出表,必须避免将custom_events展平并将其作为JSON字符串存储在列中。

关注this doc,Relationalize.apply也会展平custom_events映射。

Sample JSON:

{
    "id": "sklfsdfskdlfsdfsdfkhsdfssdf",
    "idtype": "cookieId",
    "event": "install",
    "sub_event": null,
    "ip": "XXXXXX",
    "geo": {
        "country": "IN",
        "city": null,
        "region": null
    },
    "carrier": {
        "operator": null,
        "network": null,
        "connection_type": null
    },
    "user_agent": "Mozilla/5.0",
    "device": {
        "brand": "LYF",
        "model": null,
        "type": null
    },
    "package": {
        "pkgName": "XXXXXXXX",
        "pkgVersion": "1.5.6.3",
        "pkgRating": null,
        "timestamp": "2017-12-14 11:51:27"
    },
    "custom_event1": {
        "key1": "value1",
        "key2": "value2"
    },
    "custom_event2": {
        "key": "value"
    }
}

如何在Relational存储中使用动态地图字段存储JSON数据?

2 个答案:

答案 0 :(得分:0)

假设JSON数据位于S3中,则需要执行的步骤

  1. 在AWS Glue中创建一个Crawler,并使其在目录(数据库)中创建一个架构。假设您对AWS Glue有点熟悉。

  2. 创建一个Glue作业,该作业将json转换为您喜欢的格式(parqet),该格式使用transform步骤通过Rationalize类来平整数据-https://aws.amazon.com/blogs/big-data/simplify-querying-nested-json-with-the-aws-glue-renationalize-transform/ 并以parqet格式写入

  3. 为新的展平数据创建搜寻器,并在AWS胶水中创建表

  4. 使用Athena或AWS QuickSight或您最喜欢的BI工具来查询Parqet数据

答案 1 :(得分:0)

我遇到了类似的问题,并根据this文档为JSON文件创建了分类器。

执行搜寻器时,我添加了分类器,并且像魔术一样,所有JSON结构都位于关系模型中,并存储在Redshift集群数据库中。