SAMOA-58: Needed to loop over all Union types to determine if Union-typed field 
is numeric or not.


Project: http://git-wip-us.apache.org/repos/asf/incubator-samoa/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-samoa/commit/78ae8fce
Tree: http://git-wip-us.apache.org/repos/asf/incubator-samoa/tree/78ae8fce
Diff: http://git-wip-us.apache.org/repos/asf/incubator-samoa/diff/78ae8fce

Branch: refs/heads/master
Commit: 78ae8fce13927afd4ec04d1f83e7a500009520e2
Parents: 5d131e2
Author: edi_bice <[email protected]>
Authored: Tue Feb 23 10:49:47 2016 -0500
Committer: Gianmarco De Francisci Morales <[email protected]>
Committed: Tue Apr 19 11:33:42 2016 +0300

----------------------------------------------------------------------
 .../org/apache/samoa/instances/AvroLoader.java  | 23 ++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/78ae8fce/samoa-instances/src/main/java/org/apache/samoa/instances/AvroLoader.java
----------------------------------------------------------------------
diff --git 
a/samoa-instances/src/main/java/org/apache/samoa/instances/AvroLoader.java 
b/samoa-instances/src/main/java/org/apache/samoa/instances/AvroLoader.java
index e7f18b5..9f0664c 100644
--- a/samoa-instances/src/main/java/org/apache/samoa/instances/AvroLoader.java
+++ b/samoa-instances/src/main/java/org/apache/samoa/instances/AvroLoader.java
@@ -254,15 +254,30 @@ public abstract class AvroLoader implements Loader {
         List<String> attributeLabels = attributeSchema.getEnumSymbols();
         attributes.add(new Attribute(field.name(), attributeLabels));
       }
-      else if (attributeSchema.getType() == Schema.Type.DOUBLE
-              || attributeSchema.getType() == Schema.Type.FLOAT
-              || attributeSchema.getType() == Schema.Type.LONG
-              || attributeSchema.getType() == Schema.Type.INT)
+      else if (isNumeric(field))
         attributes.add(new Attribute(field.name()));
     }
     return new InstanceInformation(relation, attributes);
   }
 
+  private boolean isNumeric(Field field) {
+    if (field.schema().getType() == Schema.Type.DOUBLE
+            || field.schema().getType() == Schema.Type.FLOAT
+            || field.schema().getType() == Schema.Type.LONG
+            || field.schema().getType() == Schema.Type.INT)
+      return true;
+    if (field.schema().getType() == Schema.Type.UNION) {
+      for (Schema schema: field.schema().getTypes()) {
+        if (schema.getType() == Schema.Type.DOUBLE
+                || schema.getType() == Schema.Type.FLOAT
+                || schema.getType() == Schema.Type.LONG
+                || schema.getType() == Schema.Type.INT)
+          return true;
+      }
+    }
+    return false;
+  }
+
   /**
    * Identifies if the dataset is is Sparse or Dense
    * 

Reply via email to