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;
}