我需要从大量有点复杂的嵌套json消息中收集一些关键的信息,这些消息会随着时间的推移而变化。每个消息都引用相同类型的事件,但是消息是由多个生产者生成的,并且有两个(将来可能会更多)模式。来自每条消息的关键信息是相似的,但到这些字段的Map取决于消息类型。
我无法共享实际数据,但下面是一个示例:
Message A
—header:
|—attribute1
|—attribute2
—typeA:
|—typeAStruct1:
||—property1
|-typeAStruct2:
||-property2
Message B
-attribute1
-attribute2
-contents:
|-message:
||-TypeB:
|||-property1
|||-TypeBStruct:
||||-property2
我想生成一个数据表,不管消息类型如何,它看起来都是这样的:
| MessageSchema | Property1 | Property2 |
| :———————————- | :———————— | :———————— |
| MessageA | A1 | A2 |
| MessageB | B1 | B2 |
| MessageA | A3 | A4 |
| MessageB | B3 | B4 |
我当前的策略是用模式a读取数据,并用模式b读取的数据进行并集。然后我可以过滤使用b模式解析a型消息时产生的空值,反之亦然。这似乎非常低效,尤其是一旦出现第三或第四种模式。我希望能够在第一次传递时正确地解析消息并应用正确的模式。
1条答案
按热度按时间u4dcyp6a1#
在我看来,只有一种方法:
对于每种消息类型,您创建一个“适配器”,该适配器将从输入创建Dataframe,并将其转换为公共架构Dataframe
然后适配器的并集输出
显然,如果您更改了“公共”模式,您还需要定制您的“适配器”。