[英]Flink use multiple data classes for a single source
一些代码:
implicit val formats = Serialization.formats(NoTypeHints)
case class DataClass(id: String, name: String)
val dataSource = env
.addSource(new FlinkKinesisConsumer[String](s"data-stream-$stage", new SimpleStringSchema, consumerConfig))
.uid(s"data-stream-$stage-source-id").name("dataSource")
.map(json => read[DataClass](json))
在这里,我从 kinesis stream 中获取数据,并对我的数据 class 进行序列化。 一切正常,但现在需要添加以另一种格式接收数据的功能(例如DataClassSecond
)
其中一个选项是添加一个额外的数据源并在您自己的 stream 中处理它们。
但这需要一个额外的运动队列。 而且我不确定这是否是一个好方法是否有任何方法可以从 kinesis 接收不同的数据,然后根据类型拆分 stream?
您可以尝试根据字段filter
DataStream[String]
,这样您将获得两个或更多只包含具有正确 JSON 格式的元素的流。
所以最简单的方法是这样的:
val streamDataClass = sourceStream.filter(_.contains("name"))
val streamDataClassSecond = sourceStream.filter(_.contains("surname"))
这仅在name
和surname
对每个DataClass
都是唯一的情况下才有效。 更有效的做法可能是首先map
将DataStream
转换为某种通用格式,或者使用Either
作为反序列化结果,然后检查它是否成功。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.