super(delim);
}
@Override
public Tuple getNext() throws IOException {
Tuple tup = super.getNext();
if (tup == null) return null;
if ( caster == null) {
caster = getLoadCaster();
}
if (signature != null) {
Properties p = UDFContext.getUDFContext().getUDFProperties(this.getClass(),
new String[] {signature});
String serializedSchema = p.getProperty(signature+".schema");
if (serializedSchema == null) return tup;
try {
schema = new ResourceSchema(Utils.getSchemaFromString(serializedSchema));
} catch (ParseException e) {
mLog.error("Unable to parse serialized schema " + serializedSchema, e);
}
}
if (schema != null) {
ResourceFieldSchema[] fieldSchemas = schema.getFields();
int tupleIdx = 0;
// If some fields have been projected out, the tuple
// only contains required fields.
// We walk the requiredColumns array to find required fields,
// and cast those.
for (int i = 0; i < fieldSchemas.length; i++) {
if (mRequiredColumns == null || (mRequiredColumns.length>i && mRequiredColumns[i])) {
Object val = null;
if(tup.get(tupleIdx) != null){
byte[] bytes = ((DataByteArray) tup.get(tupleIdx)).get();
val = CastUtils.convertToType(caster, bytes,
fieldSchemas[i], fieldSchemas[i].getType());
}
tup.set(tupleIdx, val);
tupleIdx++;
}
}
}
return tup;