трансформирующий комплекс JSON - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть таблица улья с 3 столбцами: id, event_time, payload

значение полезной нагрузки - это очень сложный документ json с десятками и десятками вложенных массивов и карт, который выглядит ниже. elem1..elemN может быть вложенными массивами или картами с другими вложенными элементами под ними.

{
    "entry":[
        {"resource": {
            "eventType": "typeA",
            "elem1": "value",
            ...
            "elemN": "valueN"
        }
        }
    ],
    "meta": {
        "elem1": 123,
    }
}

Я хотел бы преобразовать этот набор данных в фрейм данных, который будет выглядеть следующим образом, и в идеале я не хочу задавать схему заранее для этих вложенных ресурсов (они действительно очень сложны).

id, event_time, event_typeA, ... event_typeN

event_type приходит из entry.resource.eventType. Например, если моя полезная нагрузка выглядит следующим образом:

{
    "entry":[
        {"resource": {
            "eventType": "typeA",
            "elem1": "value",
            ...
            "elemN": "valueN"
        }
        },
        {"resource": {
            "eventType": "typeA",
            "elem1": "value",
            ...
            "elemN": "valueN"
        }
        },
        {"resource": {
            "eventType": "typeB",
            "elem1": "value",
            ...
            "elemN": "valueN"
        }
        },
        {"resource": {
            "eventType": "typeC",
            "elem1": "value",
            ...
            "elemN": "valueN"
        }
        }

    ],
    "meta": {
        "elem1": 123,
    }
}

Я хочу получить что-то подобное, когда все типы событий будут перенесены в одну строку в кадре данных. Может быть более одного event_type для данной полезной нагрузки и несколько экземпляров event_types в одной полезной нагрузке.

id      event_time              typeA                               typeB                                       typeC
123     2011-01-01 01:20:00     
                                [
                                    {"resource": {
                                        "eventType": "typeA",
                                        "elem1": "value",
                                        ...
                                        "elemN": "valueN"
                                    }
                                    },
                                    {"resource": {
                                        "eventType": "typeA",
                                        "elem1": "value",
                                        ...
                                        "elemN": "valueN"
                                    }
                                ]


                                                                {"resource": {
                                                                    "eventType": "typeB",
                                                                    "elem1": "value",
                                                                    ...
                                                                    "elemN": "valueN"
                                                                }
                                                                                                                {"resource": {
                                                                                                                    "eventType": "typeC",
                                                                                                                    "elem1": "value",
                                                                                                                    ...
                                                                                                                    "elemN": "valueN"
                                                                                                                }
                                                                                                                }         
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...