将StateSpec.function作为val函数传递

时间:2016-08-30 01:08:28

标签: scala spark-streaming

我想在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时会出现编译错误(无法使用这样的签名来重新引用)

1 个答案:

答案 0 :(得分:1)

您已将方法转换为函数,但仍然像使用trackStateFunc _的方法一样传递函数。试试这个:

val stateSpec = StateSpec.function(trackStateFunc)