使用Spark解析多个JSON模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Spark解析多个JSON模式相关的知识,希望对你有一定的参考价值。
我需要从大量有些复杂的嵌套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消息所产生的空值,反之亦然。这似乎非常低效,特别是一旦出现第三或第四个模式。我希望能够在第一次传递时正确解析消息并应用正确的模式。
答案
正如我所看到的 - 只有一种方式:
- 对于每种消息类型,您可以创建一个“适配器”,它将从输入创建数据帧并将其转换为公共模式数据帧
- 然后输出适配器的输出
显然,如果你改变'普通'模式 - 你也需要定制你的'适配器'。
以上是关于使用Spark解析多个JSON模式的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spark 使用包含结构的结构的数组进行 Json 解析
大数据技术之_19_Spark学习_05_Spark GraphX 应用解析 + Spark GraphX 概述解析 + 计算模式 + Pregel API + 图算法参考代码 + PageRank(