繁体   English   中英

使用结构化流处理来自 kafka 的 json 数据

[英]Processing json data from kafka using structured streaming

我想将来自 Kafka 的传入 JSON 数据转换为 dataframe。

我正在使用带有Scala 2.12的结构化流

大多数人添加硬编码模式,但如果 json 可以有额外的字段,则需要每次更改代码库,这很乏味。

一种方法是将其写入文件并推断它,但我宁愿避免这样做。

有没有其他方法可以解决这个问题?

编辑:找到一种方法将 json 字符串转换为 dataframe 但无法从 stream 源中提取它,可以提取它吗?

  1. 一种方法是将模式本身存储在消息头中(而不是键或值)。

    虽然这会增加消息大小,但解析 JSON 值将很容易,而不需要任何外部资源,如文件或模式注册表。

    新消息可以有新的模式,同时旧消息仍然可以使用它们的旧模式本身来处理,因为模式在消息本身之内。

  2. 或者,您可以版本化模式并在消息头中包含每个模式的id (或)键或值中的魔术字节,并从那里推断模式。

    这种方法之后是Confluent Schema 注册表 它允许您通过相同模式的不同版本基本上 go 并查看您的模式如何随着时间的推移而演变。

将数据读取为字符串,然后将其转换为 map[string,String],这样您就可以在不知道其架构的情况下处理任何 json

基于 JavaTechnical 的回答,最好的方法是使用模式注册表和 avro 数据而不是 json,没有办法硬编码模式(目前)。

将您的架构名称和 ID 包含为 header 并使用它们从架构注册表中读取架构。

使用from_avro将该数据转换为 df!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM