我想在sparkstreaming应用程序中使用mapwithsate函数。在databrick website
中的示例后面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)
}
val stateSpec = StateSpec.function(trackStateFunc _)
//.initialState(initialRDD)
.numPartitions(2)
.timeout(Seconds(batchIntervalSeconds*400))
上面的代码完美无缺。但是,我想将上面的函数定义为val ..因为当我在集群enwironment中运行上面的代码时,它会有更少的问题。
val trackStateFunc=(batchTime: Time, key: String, value: Option[Int], state: State[Long]) => {
val sum = value.getOrElse(0).toLong + state.getOption.getOrElse(0L)
val output = (key, sum)
state.update(sum)
Some(output)
}
val stateSpec = StateSpec.function(trackStateFunc _)
//.initialState(initialRDD)
.numPartitions(2)
.timeout(Seconds(batchIntervalSeconds*400))
但是在将上面的内容转换为val时会出现编译错误(无法使用这样的签名来重新引用)
答案 0 :(得分:1)
您已将方法转换为函数,但仍然像使用trackStateFunc _
的方法一样传递函数。试试这个:
val stateSpec = StateSpec.function(trackStateFunc)