You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datafu.apache.org by ey...@apache.org on 2016/10/26 17:59:01 UTC

incubator-datafu git commit: DATAFU-25: AliasableEvalFunc should use getInputSchema

Repository: incubator-datafu
Updated Branches:
  refs/heads/master e89c780bf -> 0b4b2e178


DATAFU-25: AliasableEvalFunc should use getInputSchema


Project: http://git-wip-us.apache.org/repos/asf/incubator-datafu/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-datafu/commit/0b4b2e17
Tree: http://git-wip-us.apache.org/repos/asf/incubator-datafu/tree/0b4b2e17
Diff: http://git-wip-us.apache.org/repos/asf/incubator-datafu/diff/0b4b2e17

Branch: refs/heads/master
Commit: 0b4b2e1784d2a965c18de56c7978e39109cd1fc0
Parents: e89c780
Author: eyala <ey...@apache.org>
Authored: Wed Oct 26 20:57:39 2016 +0300
Committer: eyala <ey...@apache.org>
Committed: Wed Oct 26 20:57:39 2016 +0300

----------------------------------------------------------------------
 .../java/datafu/pig/util/AliasableEvalFunc.java   | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-datafu/blob/0b4b2e17/datafu-pig/src/main/java/datafu/pig/util/AliasableEvalFunc.java
----------------------------------------------------------------------
diff --git a/datafu-pig/src/main/java/datafu/pig/util/AliasableEvalFunc.java b/datafu-pig/src/main/java/datafu/pig/util/AliasableEvalFunc.java
index c14df2c..b55ef51 100644
--- a/datafu-pig/src/main/java/datafu/pig/util/AliasableEvalFunc.java
+++ b/datafu-pig/src/main/java/datafu/pig/util/AliasableEvalFunc.java
@@ -102,9 +102,25 @@ public abstract class AliasableEvalFunc<T> extends ContextualEvalFunc<T>
    */
   public abstract Schema getOutputSchema(Schema input);
 
+  /*
+   * Previously, this class worked by capturing the schema of the input tuple on the front-end and storing it into the UDFContext.,
+   * After {@link EvalFunc.getInputSchema} was introduced in Pig 0.11, the implementation was changed to use it and the 
+   * UDF context is used only as a fallback.
+   */
   @SuppressWarnings("unchecked")
   private Map<String, Integer> getAliasMap() {
-    return (Map<String, Integer>)getInstanceProperties().get(ALIAS_MAP_PROPERTY);
+    if (aliasToPosition == null) {
+      if (getInputSchema() == null) {
+        aliasToPosition = (Map<String, Integer>)getInstanceProperties().get(ALIAS_MAP_PROPERTY);
+      } else {
+        Map<String, Integer> aliasMap = new HashMap<String, Integer>();
+        constructFieldAliases(aliasMap, getInputSchema(), null);
+        log.debug("In instance: "+getInstanceName()+", creating alias map: " + aliasMap);
+        aliasToPosition = aliasMap;
+      }
+    }
+
+    return aliasToPosition;
   }
   
   private void setAliasMap(Map<String, Integer> aliases) {