[英]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.