johnyangk commented on a change in pull request #123: [NEMO-129] Support Beam's
WindowedWordCount example
URL: https://github.com/apache/incubator-nemo/pull/123#discussion_r224953589
##########
File path:
compiler/frontend/beam/src/main/java/org/apache/nemo/compiler/frontend/beam/transform/GroupByKeyTransform.java
##########
@@ -26,53 +32,172 @@
/**
* Group Beam KVs.
- * @param <I> input type.
+ * @param <K> key type.
+ * @param <InputT> input type.
*/
-public final class GroupByKeyTransform<I> implements Transform<I,
WindowedValue<KV<Object, List>>> {
+public final class GroupByKeyTransform<K, InputT>
+ extends AbstractTransform<KV<K, InputT>, KeyedWorkItem<K, InputT>, KV<K,
Iterable<InputT>>> {
private static final Logger LOG =
LoggerFactory.getLogger(GroupByKeyTransform.class.getName());
- private final Map<Object, List> keyToValues;
- private OutputCollector<WindowedValue<KV<Object, List>>> outputCollector;
+
+ private final SystemReduceFn reduceFn;
+ private transient TimerInternalsFactory timerInternalsFactory;
/**
* GroupByKey constructor.
*/
- public GroupByKeyTransform() {
- this.keyToValues = new HashMap<>();
+ public GroupByKeyTransform(final Map<TupleTag<?>, Coder<?>> outputCoders,
+ final TupleTag<KV<K, Iterable<InputT>>>
mainOutputTag,
+ final List<TupleTag<?>> additionalOutputTags,
+ final WindowingStrategy<?, ?> windowingStrategy,
+ final Collection<PCollectionView<?>> sideInputs,
+ final PipelineOptions options,
+ final SystemReduceFn reduceFn) {
+ super(null, /* doFn */
+ null, /* inputCoder */
+ outputCoders,
+ mainOutputTag,
+ additionalOutputTags,
+ windowingStrategy,
+ sideInputs,
+ options);
+ this.reduceFn = reduceFn;
}
+ /**
+ * This creates a new DoFn that groups elements by key and window.
+ * @param doFn original doFn.
+ * @return GroupAlsoByWindowViaWindowSetNewDoFn
+ */
@Override
- public void prepare(final Context context, final
OutputCollector<WindowedValue<KV<Object, List>>> oc) {
- this.outputCollector = oc;
+ protected DoFn wrapDoFn(final DoFn doFn) {
+ timerInternalsFactory = new InMemoryTimerInternalsFactory();
+ return
+ GroupAlsoByWindowViaWindowSetNewDoFn.create(
Review comment:
Is this the default approach used by other Beam runners as well?
Maybe add a comment here to mention that?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services