Scala 积累火花流数据流的最佳解决方案
我正在寻找在Spark数据流中累积最后N条消息的最佳解决方案。我还想指定要保留的邮件数 例如,给定以下流,我希望保留最后3个元素:Scala 积累火花流数据流的最佳解决方案,scala,apache-spark,spark-streaming,dstream,Scala,Apache Spark,Spark Streaming,Dstream,我正在寻找在Spark数据流中累积最后N条消息的最佳解决方案。我还想指定要保留的邮件数 例如,给定以下流,我希望保留最后3个元素: Iteration New message Downstream 1 A [A] 2 B [A, B] 3 C [A, B, C] 4 D [B, C, D] 到目前为止,我正在研究以下有关DStrea
Iteration New message Downstream
1 A [A]
2 B [A, B]
3 C [A, B, C]
4 D [B, C, D]
到目前为止,我正在研究以下有关DStream的方法:
实现这一点的最佳解决方案是什么?
mapWithState
正是您所需要的,而且绝对不会太繁琐:
case class Message(x: String)
def statefulTransformation(key: Int,
value: Option[Message],
state: State[mutable.MutableList[Message]]): Option[Message] = {
def updateState(value: Message): Message = {
val updatedList =
state
.getOption()
.map(list => if (list.size > 3) list.drop(1) :+ value else list :+ value)
.getOrElse(mutable.MutableList(value))
state.update(updatedList)
value
}
value.map(updateState)
}
现在你所需要的是:
val stateSpec = StateSpec.function(statefulTransformation _)
dStream.mapWithState(stateSpec)
旁注-我使用了mutable.MutableList
作为常量时间追加