@Override public void close() { outputCollector.emit(aggregatedDynOptData); }
/** * This just forwards watermarks to the next operator because it has one data stream. * @param edgeIndex edge index * @param watermark watermark */ @Override public void trackAndEmitWatermarks(final int edgeIndex, final Watermark watermark) { watermarkCollector.emitWatermark(watermark); } }
@Override public void onWatermark(final Watermark inputWatermark) { // If no data, just forwards the watermark if (windowListMap.size() == 0 && currentOutputWatermark < inputWatermark.getTimestamp()) { currentOutputWatermark = inputWatermark.getTimestamp(); outputCollector.emitWatermark(inputWatermark); return; } final Iterator<Map.Entry<BoundedWindow, List<I>>> iterator = windowListMap.entrySet().iterator(); long minOutputTimestampOfEmittedWindows = Long.MAX_VALUE; while (iterator.hasNext()) { final Map.Entry<BoundedWindow, List<I>> entry = iterator.next(); if (entry.getKey().maxTimestamp().getMillis() <= inputWatermark.getTimestamp()) { // emit the windowed data if the watermark timestamp > the window max boundary final O output = viewFn.apply(new MultiView<>(entry.getValue())); outputCollector.emit(WindowedValue.of( output, entry.getKey().maxTimestamp(), entry.getKey(), PaneInfo.ON_TIME_AND_ONLY_FIRING)); iterator.remove(); minOutputTimestampOfEmittedWindows = Math.min(minOutputTimestampOfEmittedWindows, entry.getKey().maxTimestamp().getMillis()); } } if (minOutputTimestampOfEmittedWindows != Long.MAX_VALUE && currentOutputWatermark < minOutputTimestampOfEmittedWindows) { // update current output watermark and emit to next operators currentOutputWatermark = minOutputTimestampOfEmittedWindows; outputCollector.emitWatermark(new Watermark(currentOutputWatermark)); } }
/** * Process a data element down the DAG dependency. */ private void processElement(final OutputCollector outputCollector, final Object dataElement) { outputCollector.emit(dataElement); }
/** * This just forwards watermarks to the next operator because it has one data stream. * @param edgeIndex edge index * @param watermark watermark */ @Override public void trackAndEmitWatermarks(final int edgeIndex, final Watermark watermark) { watermarkCollector.emitWatermark(watermark); } }
@Override public void onData(final T element) { outputCollector.emit(element); }
@Override public void onWatermark(final Watermark watermark) { outputCollector.emitWatermark(watermark); }
@Override public void onData(final T element) { outputCollector.emit(element); }
@Override public void onWatermark(final Watermark watermark) { outputCollector.emitWatermark(watermark); }
@Override public void close() { outputCollector.emit(aggregatedDynOptData); }
private void processWatermark(final OutputCollector outputCollector, final Watermark watermark) { outputCollector.emitWatermark(watermark); }
/** * Process a data element down the DAG dependency. */ private void processElement(final OutputCollector outputCollector, final Object dataElement) { outputCollector.emit(dataElement); }
@Override public void onWatermark(final Watermark watermark) { outputCollector.emitWatermark(watermark); }
@Override public void onData(final T element) { outputCollector.emit(element); }
@Override public void onWatermark(final Watermark watermark) { outputCollector.emitWatermark(watermark); }
private void processWatermark(final OutputCollector outputCollector, final Watermark watermark) { outputCollector.emitWatermark(watermark); }
@Override public void onData(final I element) { try { outputCollector.emit(func.call(element)); } catch (Exception e) { throw new RuntimeException(e); } }
@Override public void onWatermark(final Watermark watermark) { outputCollector.emitWatermark(watermark); }
@Override public void onData(final T element) { try { Tuple2<K, V> data = func.call(element); outputCollector.emit(data); } catch (Exception e) { throw new RuntimeException(e); } }