如何在不中断流式传输作业的情况下更改 spark spark 流式事件中的 json 架构?

Posted

技术标签:

【中文标题】如何在不中断流式传输作业的情况下更改 spark spark 流式事件中的 json 架构?【英文标题】:how to change json schema in spark spark streamning events without interrupting the streamning Job? 【发布时间】:2021-10-29 01:27:08 【问题描述】:

我有一个用例,我需要在不中断流式传输作业的情况下更改 JSON 的架构。我正在使用一个 conf 文件,其中提到了所有必需的架构。我已经尝试过使用单独的流管道持久化和取消持久化缓存和广播变量,但仍然没有运气。提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

除了将数据集读取为 json 之外,您还可以尝试将其读取为文本,然后根据从 HDFS 或 DB 中的配置文件外部来的架构映射它。

所以不要做类似的事情,

val df = spark.readStream.format("json").load(.. path ..) 

做,

import sparkSession.implicits._

val df = spark.readStream
.format("text").load( .. path .. )
.select("value")
.as[String]
.mapPartitions(partStrings => 
    val currentSchema = readSchemaFromFile(???)
    partStrings.map(str => parseJSON(currentSchema, str))
)

mapPartitions 阻止对每条记录进行架构查找。

【讨论】:

以上是关于如何在不中断流式传输作业的情况下更改 spark spark 流式事件中的 json 架构?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不涉及中间服务器的情况下直接从 HTML 流式传输 RTMP 视频

Spark 流式传输作业在被驱动程序停止后失败

拆分数据数据类型后的Spark RDD如何在不更改数据类型的情况下拆分

Spark流式传输作业不会删除随机播放文件

如何在不影响背景的情况下更改网页内容?

如果通过 spark-submit 提交作业,我们可以在不显式创建的情况下使用 spark 会话对象吗