protected Instance readInstanceDense()

in samoa-instances/src/main/java/org/apache/samoa/instances/AvroLoader.java [70:116]


  protected Instance readInstanceDense(GenericRecord record)
  {
    Instance instance = new DenseInstance(this.instanceInformation.numAttributes() + 1);
    int numAttribute = 0;

    for (Attribute attribute : attributes) {
      Object value = record.get(attribute.name);

      boolean isNumeric = attributes.get(numAttribute).isNumeric();
      boolean isNominal = attributes.get(numAttribute).isNominal();

      if (isNumeric)
      {
        if (value instanceof Double)
          this.setDenseValue(instance, numAttribute, (double) value);
        else if (value instanceof Long)
          this.setDenseValue(instance, numAttribute, (long) value);
        else if (value instanceof Integer)
          this.setDenseValue(instance, numAttribute, (int) value);
        else
          throw new RuntimeException("Invalid data type in the Avro data for Numeric Type : " + attribute.name);
      }
      else if (isNominal)
      {
        double valueAttribute;

        if (!(value instanceof EnumSymbol))
          throw new RuntimeException("Invalid data type in the Avro data for Nominal Type : " + attribute.name);

        EnumSymbol enumSymbolalue = (EnumSymbol) value;

        String stringValue = enumSymbolalue.toString();

        if (("?".equals(stringValue)) || (stringValue == null)) {
          valueAttribute = Double.NaN;
        } else {
          valueAttribute = this.instanceInformation.attribute(numAttribute).indexOfValue(stringValue);
        }

        this.setDenseValue(instance, numAttribute, valueAttribute);
      }
      numAttribute++;
    }

    return (numAttribute > 0) ? instance : null;

  }