使用Spark解析多个JSON模式

问题描述 投票:0回答:1

我需要从大量有些复杂的嵌套JSON消息中收集一些关键信息,这些消息随着时间的推移而不断发展。每条消息引用相同类型的事件,但消息由多个生成器生成,并且有两个(可能在将来可能更多)模式。每条消息的关键信息类似,但到这些字段的映射取决于消息类型。

我无法分享实际数据,但这是一个例子:

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消息所产生的空值,反之亦然。这似乎非常低效,特别是一旦出现第三或第四个模式。我希望能够在第一次传递时正确解析消息并应用正确的模式。

json hadoop apache-spark apache-spark-sql
1个回答
0
投票

正如我所看到的 - 只有一种方式:

  • 对于每种消息类型,您可以创建一个“适配器”,它将从输入创建数据帧并将其转换为公共模式数据帧
  • 然后输出适配器的输出

显然,如果你改变'普通'模式 - 你也需要定制你的'适配器'。

© www.soinside.com 2019 - 2024. All rights reserved.