Jvav版本
JavaPairDStream<String,Long> aggregateDStream = mapDSRDD.updateStateByKey(new Function2<List<Long>, Optional<Long>, Optional<Long>>() {
/**
*
* @param v1 相同key传进来的值的集合
* @param v2 集群中保存的那份值。
* @return
* @throws Exception
*/
@Override
public Optional<Long> call(List<Long> v1, Optional<Long> v2) throws Exception {
long clickCount = 0L;
if(v2.isPresent())
{
clickCount = v2.get();
}
for(Long val:v1)
{
clickCount+=val;
}
return Optional.of(clickCount);
}
});
Scala 实现
val dailyProvinceCityClickCount = mapDStream.updateStateByKey[Long]((values:Seq[Long],state:Option[Long])=>{
var tmpValue = 0L
if(state.isDefined)
{
tmpValue = state.get
}
var index:Int = 0
while(index<values.size)
{
tmpValue += values(index)
index += 1
}
Option(tmpValue)
})