@Override public Iterator<Tuple2<KeyedWindow<W, KEY>, VALUE>> call(SparkElement<?, IN> wel) { final Iterable<W> windows = windowing.assignWindowsToElement(wel); return Iterators.transform( windows.iterator(), wid -> { final long stamp = Objects.requireNonNull(wid).maxTimestamp() - 1; return new Tuple2<>( new KeyedWindow<>(wid, stamp, keyExtractor.apply(wel.getElement())), valueExtractor.apply(wel.getElement())); }); } }
@Override @SuppressWarnings("unchecked") public Iterator<Tuple2<KeyedWindow, Object>> call(SparkElement wel) throws Exception { Iterable<Window> windows = windowing.assignWindowsToElement(wel); return Iterators.transform(windows.iterator(), w -> new Tuple2<>( new KeyedWindow<>(w, wel.getTimestamp(), keyExtractor.apply(wel.getElement())), valueExtractor.apply(wel.getElement()))); } }
public KeyedWindow<W, K> toKeyedWindow() { return new KeyedWindow<>(window(), timestamp(), key()); } }
@Override @SuppressWarnings("unchecked") public Iterator<Tuple2<KeyedWindow, SparkElement>> call(SparkElement se) throws Exception { final Iterable<Window> windows = windowing.assignWindowsToElement(new SparkElement( se.getWindow(), se.getTimestamp(), left ? Either.left(se.getElement()) : Either.right(se.getElement()))); return Iterators.transform(windows.iterator(), w -> new Tuple2<>( new KeyedWindow<>(w, se.getTimestamp(), keyExtractor.apply(se.getElement())), new SparkElement(w, se.getTimestamp(), se.getElement()))); }