我打算基于一些网络数据的会话来实现火花流应用程序。我正在使用状态完整的RDD编程。
由于记录和密钥数量巨大,我需要在流式逻辑中的某些条件被删除后删除mapwithsate函数中的某些状态!
我想知道为什么要这样做,我知道在sate规范中,有一个超时但这不是我正在寻找的功能而是我应该从内存中删除状态以减轻我的流式传输的内存量应用消耗。
例如下面是一个示例satefull函数
def trackStateFunc(batchTime: Time, key: String, value: Option[Int],state: State[Long]): Option[(String, Long)] = {
val sum = value.getOrElse(0).toLong + state.getOption.getOrElse(0L)
val output = (key, sum)
state.update(sum)
Some(output)
}
我想知道如果应用了某些条件,如何删除密钥的状态,以便释放我的流应用程序需要的内存..
答案 0 :(得分:1)
您可以根据某些条件调用state.remove()函数。请参阅https://spark.apache.org/docs/2.0.0/api/java/org/apache/spark/streaming/State.html
上的api