@Override public <K> Serde<Windowed<K>> getKeySerde(final Class<K> innerType) { return WindowedSerdes.timeWindowedSerdeFrom(innerType); } }
@Override public <K> Serde<Windowed<K>> getKeySerde(final Class<K> innerType) { return WindowedSerdes.sessionWindowedSerdeFrom(innerType); } }
@Override public void close() { delegateTransformer.close(); } }
@SuppressWarnings("unchecked") @Override public KTable applyAggregate( final KGroupedStream groupedStream, final Initializer initializer, final UdafAggregator aggregator, final Materialized<String, GenericRow, ?> materialized ) { final TimeWindows windows = TimeWindows .of(Duration.ofMillis(sizeUnit.toMillis(size))) .advanceBy(Duration.ofMillis(advanceByUnit.toMillis(advanceBy))); return groupedStream .windowedBy(windows) .aggregate(initializer, aggregator, materialized); }
@SuppressWarnings("unchecked") @Override public KTable applyAggregate(final KGroupedStream groupedStream, final Initializer initializer, final UdafAggregator aggregator, final Materialized<String, GenericRow, ?> materialized) { final TimeWindows windows = TimeWindows.of(Duration.ofMillis(sizeUnit.toMillis(size))); return groupedStream .windowedBy(windows) .aggregate(initializer, aggregator, materialized); }
@SuppressWarnings("unchecked") @Override public KTable applyAggregate(final KGroupedStream groupedStream, final Initializer initializer, final UdafAggregator aggregator, final Materialized<String, GenericRow, ?> materialized) { final SessionWindows windows = SessionWindows.with(Duration.ofMillis(sizeUnit.toMillis(gap))); return groupedStream .windowedBy(windows) .aggregate(initializer, aggregator, aggregator.getMerger(), materialized); }
@SuppressWarnings("unchecked") @Test public void shouldCreateSessionWindowedStreamWithInactiviyGap() { EasyMock.expect(groupedStreamMock.windowedBy(EasyMock.capture(sessionWindows))).andReturn(sessionWindowed); EasyMock.expect(sessionWindowed.aggregate(same(initializer), same(aggregator), anyObject(Merger.class), same(materialized))).andReturn(null); EasyMock.replay(groupedStreamMock, aggregator, sessionWindowed); expression.applyAggregate(groupedStreamMock, initializer, aggregator, materialized); assertThat(sessionWindows.getValue().inactivityGap(), equalTo(5000L)); EasyMock.verify(groupedStreamMock); }
@Override public KeyValue<KR, VR> transform(K key, V value) { return mapper.apply(key, value); } });
@Override public VR transform(V value) { return mapper.apply(value); } });
@Override public void close() { delegateTransformer.close(); } }
@Override public void init(ProcessorContext processorContext) { this.processorContext = processorContext; delegateTransformer.init(processorContext); }
@Override public void init(ProcessorContext processorContext) { this.processorContext = processorContext; delegateTransformer.init(processorContext); }
@Override public VR transform(K readOnlyKey, V value) { return mapper.apply(readOnlyKey, value); } });
@Override public void process(K key, V value) { action.apply(key, value); } });
@Override public void close() { delegateTransformer.close(); } }
@Override public void init(ProcessorContext processorContext) { this.processorContext = processorContext; delegateTransformer.init(processorContext); }
@Test public void shouldCreateHoppingWindowAggregate() { final KGroupedStream stream = EasyMock.createNiceMock(KGroupedStream.class); final TimeWindowedKStream windowedKStream = EasyMock.createNiceMock(TimeWindowedKStream.class); final UdafAggregator aggregator = EasyMock.createNiceMock(UdafAggregator.class); final HoppingWindowExpression windowExpression = new HoppingWindowExpression(10, TimeUnit.SECONDS, 4, TimeUnit.MILLISECONDS); final Initializer initializer = () -> 0; final Materialized<String, GenericRow, WindowStore<Bytes, byte[]>> store = Materialized.as("store"); EasyMock.expect(stream.windowedBy(TimeWindows.of(Duration.ofMillis(10000L)).advanceBy(Duration.ofMillis(4L)))).andReturn(windowedKStream); EasyMock.expect(windowedKStream.aggregate(same(initializer), same(aggregator), same(store))).andReturn(null); EasyMock.replay(stream, windowedKStream); windowExpression.applyAggregate(stream, initializer, aggregator, store); EasyMock.verify(stream, windowedKStream); }
@Override public <K> Serde<Windowed<K>> getKeySerde(final Class<K> innerType) { return WindowedSerdes.timeWindowedSerdeFrom(innerType); } }
@Override public KeyValue<K, V> transform(K key, V value) { action.apply(key, value); return KeyValue.pair(key, value); } });
@Test public void shouldCreateTumblingWindowAggregate() { final KGroupedStream stream = EasyMock.createNiceMock(KGroupedStream.class); final TimeWindowedKStream windowedKStream = EasyMock.createNiceMock(TimeWindowedKStream.class); final UdafAggregator aggregator = EasyMock.createNiceMock(UdafAggregator.class); final TumblingWindowExpression windowExpression = new TumblingWindowExpression(10, TimeUnit.SECONDS); final Initializer initializer = () -> 0; final Materialized<String, GenericRow, WindowStore<Bytes, byte[]>> store = Materialized.as("store"); EasyMock.expect(stream.windowedBy(TimeWindows.of(Duration.ofMillis(10000L)))).andReturn(windowedKStream); EasyMock.expect(windowedKStream.aggregate(same(initializer), same(aggregator), same(store))).andReturn(null); EasyMock.replay(stream, windowedKStream); windowExpression.applyAggregate(stream, initializer, aggregator, store); EasyMock.verify(stream, windowedKStream); }