/*** * Determine the field schema of an ResourceFieldSchema * @param rcFieldSchema the rcFieldSchema we want translated * @return the field schema corresponding to the object * @throws ExecException,FrontendException,SchemaMergeException */ public static Schema.FieldSchema determineFieldSchema(ResourceSchema.ResourceFieldSchema rcFieldSchema) throws ExecException, FrontendException, SchemaMergeException { byte dt = rcFieldSchema.getType(); Iterator<ResourceSchema.ResourceFieldSchema> fieldIter = null; long fieldNum = 0; if (dt == TUPLE || dt == BAG ) { fieldIter = Arrays.asList(rcFieldSchema.getSchema().getFields()).iterator(); fieldNum = rcFieldSchema.getSchema().getFields().length; } return determineFieldSchema(dt, fieldIter, fieldNum, ResourceSchema.ResourceFieldSchema.class); }
@Override public LogicalFieldSchema getFieldSchema() throws FrontendException { if (fieldSchema!=null) return fieldSchema; try { fieldSchema = Util.translateFieldSchema(DataType.determineFieldSchema(val)); }catch (Exception e) { throw new FrontendException( "Error determining field schema from object in constant expression", 1125, PigException.INPUT, e ); } uidOnlyFieldSchema = fieldSchema.mergeUid(uidOnlyFieldSchema); if (type != DataType.NULL && fieldSchema.type == DataType.BYTEARRAY && val == null) { fieldSchema.type = type; } return fieldSchema; }
/*** * Determine the field schema of an object * @param o the object whose field schema is to be determined * @return the field schema corresponding to the object * @throws ExecException,FrontendException,SchemaMergeException */ public static Schema.FieldSchema determineFieldSchema(Object o) throws ExecException, FrontendException, SchemaMergeException { byte dt = findType(o); Iterator fieldIter = null; long fieldNum = 0; if ( dt == TUPLE ) { fieldIter = ((Tuple) o).getAll().iterator(); fieldNum = ((Tuple) o).size(); } else if ( dt == BAG ) { fieldNum = ((DataBag) o).size(); fieldIter = ((DataBag)o).iterator(); } return determineFieldSchema(dt, fieldIter, fieldNum, Object.class); } }
for (int i = 0; i < numFields; i++) { try { s.add(DataType.determineFieldSchema(t.get(i)));
schema = new Schema(); for(int i = 0; i < fieldNum; ++i) { schema.add(determineFieldSchema(klass.cast(fieldIter.next()))); ArrayList<Schema> schemas = new ArrayList<Schema>(); while (fieldIter.hasNext() ) { schemas.add(determineFieldSchema(klass.cast(fieldIter.next())).schema);