使用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 解析

Spark SQL:无需秒即可解析时间戳

片段中的 JSON 解析 [关闭]

使用 spark 读取和访问 json 文件中的嵌套字段

为 Spark Rows 定义新模式

大数据技术之_19_Spark学习_05_Spark GraphX 应用解析 + Spark GraphX 概述解析 + 计算模式 + Pregel API + 图算法参考代码 + PageRank(