嵌套 json 中的结构化流式传输不同模式

Posted

技术标签:

【中文标题】嵌套 json 中的结构化流式传输不同模式【英文标题】:structured streaming different schema in nested json 【发布时间】:2018-08-13 16:34:06 【问题描述】:

您好,我有一个场景,传入的消息是一个 Json,它的标题是表名,数据部分有表列数据。现在我想把它写到镶木地板上以分隔文件夹,比如/emp/dept。我可以通过基于 tablname 聚合行来在常规流中实现这一点。但在结构化流媒体中,我无法拆分它。如何在结构化流中实现这一点。

"tableName":"employee","data":"empid":1","empname":"john","dept":"CS" "tableName":"employee","data":"empid":2","empname":"james","dept":"CS" "tableName":"dept","data":"dept":"1","deptname":"CS","desc":"COMPUTER 科学部”

【问题讨论】:

不是一个很好的解决方案,但我通过创建多个流、过滤每个流、然后将过滤后的数据写入我指定的位置来解决了同样的问题。我找不到任何关于动态流式传输到不同位置的信息。 非常感谢 Jeremy 。所以在你的情况下,你是从 Kafka 中阅读的吗?所以,你创建了单独的主题吧 我正在从多个流中阅读相同的主题。 【参考方案1】:

我通过循环遍历预期表的列表来实现这个工作,然后为每个表 从数据帧中过滤记录并应用特定于表的模式和编码器,然后写入接收器。所以读取只发生一次,每个表都会调用 writeStream 并且它工作正常。感谢大家的帮助

这还负责根据表对 parquet 输出文件夹进行动态分区。

【讨论】:

以上是关于嵌套 json 中的结构化流式传输不同模式的主要内容,如果未能解决你的问题,请参考以下文章

Spark结构化流式kafka在没有模式的情况下转换JSON(推断模式)

jq streaming - 过滤嵌套列表并保留全局结构

将 JSON 流式传输到 Bigquery

如何从文件中流式传输 JSON?

使用 Spark 访问嵌套在结构中的 json 数组

结构化流式传输:具有流式传输源的查询必须使用 writeStream.start() 执行