使用spark解析多个json模式

wlwcrazw  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(411)

我需要从大量有点复杂的嵌套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型消息时产生的空值,反之亦然。这似乎非常低效,尤其是一旦出现第三或第四种模式。我希望能够在第一次传递时正确地解析消息并应用正确的模式。

u4dcyp6a

u4dcyp6a1#

在我看来,只有一种方法:
对于每种消息类型,您创建一个“适配器”,该适配器将从输入创建Dataframe,并将其转换为公共架构Dataframe
然后适配器的并集输出
显然,如果您更改了“公共”模式,您还需要定制您的“适配器”。

相关问题