You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nemo.apache.org by wo...@apache.org on 2018/05/28 08:20:32 UTC

[incubator-nemo] branch master updated: [NEMO-67] Fix Communication Pattern for Beam CoGroupByKey transform (#23)

This is an automated email from the ASF dual-hosted git repository.

wonook pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nemo.git


The following commit(s) were added to refs/heads/master by this push:
     new 94761f4  [NEMO-67] Fix Communication Pattern for Beam CoGroupByKey transform (#23)
94761f4 is described below

commit 94761f42b1787b2b098af729355120098021546b
Author: JangHo Seo <ja...@jangho.io>
AuthorDate: Mon May 28 17:20:24 2018 +0900

    [NEMO-67] Fix Communication Pattern for Beam CoGroupByKey transform (#23)
    
    JIRA: [NEMO-67: Support Beam CoGroupByKey transform](https://issues.apache.org/jira/projects/NEMO/issues/NEMO-67)
    
    **Major changes:**
    - Modify NemoPipelineVisitor to fix communication pattern for Beam CoGroupByKey transform
    
    **Minor changes to note:**
    - None
    
    **Tests for the changes:**
    - Currently, none.
    - We can add example join application later by [NEMO-71: Add LocationShareAssignmentPass and Example Application](https://issues.apache.org/jira/projects/NEMO/issues/NEMO-71).
    
    **Other comments:**
    - None
    
    resolves [NEMO-67](https://issues.apache.org/jira/projects/NEMO/issues/NEMO-67)
---
 .../frontend/beam/NemoPipelineVisitor.java         | 27 ++++++++++++++++++----
 .../frontend/beam/transform/DoTransform.java       |  7 ++++++
 2 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/compiler/frontend/beam/src/main/java/edu/snu/nemo/compiler/frontend/beam/NemoPipelineVisitor.java b/compiler/frontend/beam/src/main/java/edu/snu/nemo/compiler/frontend/beam/NemoPipelineVisitor.java
index a649d72..f61adc6 100644
--- a/compiler/frontend/beam/src/main/java/edu/snu/nemo/compiler/frontend/beam/NemoPipelineVisitor.java
+++ b/compiler/frontend/beam/src/main/java/edu/snu/nemo/compiler/frontend/beam/NemoPipelineVisitor.java
@@ -15,6 +15,7 @@
  */
 package edu.snu.nemo.compiler.frontend.beam;
 
+import edu.snu.nemo.common.ir.vertex.transform.Transform;
 import edu.snu.nemo.compiler.frontend.beam.coder.BeamCoder;
 import edu.snu.nemo.common.dag.DAGBuilder;
 import edu.snu.nemo.common.ir.edge.IREdge;
@@ -241,13 +242,29 @@ public final class NemoPipelineVisitor extends Pipeline.PipelineVisitor.Defaults
    */
   private static DataCommunicationPatternProperty.Value getEdgeCommunicationPattern(final IRVertex src,
                                                                                     final IRVertex dst) {
-    if (dst instanceof OperatorVertex && ((OperatorVertex) dst).getTransform() instanceof GroupByKeyTransform) {
+    final Class<?> constructUnionTableFn;
+    try {
+      constructUnionTableFn = Class.forName("org.apache.beam.sdk.transforms.join.CoGroupByKey$ConstructUnionTableFn");
+    } catch (final ClassNotFoundException e) {
+      throw new RuntimeException(e);
+    }
+
+    final Transform srcTransform = src instanceof OperatorVertex ? ((OperatorVertex) src).getTransform() : null;
+    final Transform dstTransform = dst instanceof OperatorVertex ? ((OperatorVertex) dst).getTransform() : null;
+    final DoFn srcDoFn = srcTransform instanceof DoTransform ? ((DoTransform) srcTransform).getDoFn() : null;
+
+    if (srcDoFn != null && srcDoFn.getClass().equals(constructUnionTableFn)) {
       return DataCommunicationPatternProperty.Value.Shuffle;
-    } else if (dst instanceof OperatorVertex && ((OperatorVertex) dst).getTransform() instanceof CreateViewTransform
-        || src instanceof OperatorVertex && ((OperatorVertex) src).getTransform() instanceof CreateViewTransform) {
-      return DataCommunicationPatternProperty.Value.BroadCast;
-    } else {
+    }
+    if (srcTransform instanceof FlattenTransform) {
       return DataCommunicationPatternProperty.Value.OneToOne;
     }
+    if (dstTransform instanceof GroupByKeyTransform) {
+      return DataCommunicationPatternProperty.Value.Shuffle;
+    }
+    if (srcTransform instanceof CreateViewTransform || dstTransform instanceof CreateViewTransform) {
+      return DataCommunicationPatternProperty.Value.BroadCast;
+    }
+    return DataCommunicationPatternProperty.Value.OneToOne;
   }
 }
diff --git a/compiler/frontend/beam/src/main/java/edu/snu/nemo/compiler/frontend/beam/transform/DoTransform.java b/compiler/frontend/beam/src/main/java/edu/snu/nemo/compiler/frontend/beam/transform/DoTransform.java
index e099253..883d401 100644
--- a/compiler/frontend/beam/src/main/java/edu/snu/nemo/compiler/frontend/beam/transform/DoTransform.java
+++ b/compiler/frontend/beam/src/main/java/edu/snu/nemo/compiler/frontend/beam/transform/DoTransform.java
@@ -328,4 +328,11 @@ public final class DoTransform<I, O> implements Transform<I, O> {
       throw new UnsupportedOperationException("timer() in ProcessContext under DoTransform");
     }
   }
+
+  /**
+   * @return {@link DoFn} for this transform.
+   */
+  public DoFn getDoFn() {
+    return doFn;
+  }
 }

-- 
To stop receiving notification emails like this one, please contact
wonook@apache.org.