Flink Option: TemperatureAverager
12
/** apply() is invoked once for each window */
override def apply(
sensorId: Int,
window: TimeWindow,
events: Iterable[Event],
out: Collector[Event]
): Unit = {
val (count, sum) = events.foldLeft((0, 0.0)) {
case ((count, temperature), e) =>
(count + 1, temperature + e.temperature)
}
// emit an Event with the average temperature
out.collect(Event(window.getEnd, avgTemp, events.head.sensor))
}
val avgTemp = if (count == 0) 0 else sum / count