private static ObjectInspector[] getInputObjectInspectorAsArray(TypeInfo inputTypeInfo, ConstantObjectInspectInfo constantsInfo) throws IOException { StructObjectInspector inputObjectInspector = (StructObjectInspector)HiveUtils.createObjectInspector(inputTypeInfo); ObjectInspector[] arguments = new ObjectInspector[inputObjectInspector.getAllStructFieldRefs().size()]; for (int i=0;i<inputObjectInspector.getAllStructFieldRefs().size();i++) { if (constantsInfo!=null && constantsInfo.get(i)!=null) { arguments[i] = constantsInfo.get(i); } else { arguments[i] = inputObjectInspector.getAllStructFieldRefs().get(i).getFieldObjectInspector(); } } return arguments; }
void injectConstantObjectInspector(StructObjectInspector inputObjectInspector) { if (!isEmpty()) { for (int i=0;i<size();i++) { if (get(i)!=null) { StructField origField = inputObjectInspector.getAllStructFieldRefs().get(i); StructField newfield = new HiveUtils.Field(origField.getFieldName(), get(i), i); ((List<HiveUtils.Field>)inputObjectInspector.getAllStructFieldRefs()).set(i, (HiveUtils.Field)newfield); } } } } }
private void init(Schema inputSchema, GenericUDF evalUDF, ConstantObjectInspectInfo constantsInfo) throws IOException { ResourceSchema rs = new ResourceSchema(inputSchema); ResourceFieldSchema wrappedTupleFieldSchema = new ResourceFieldSchema(); wrappedTupleFieldSchema.setType(DataType.TUPLE); wrappedTupleFieldSchema.setSchema(rs); TypeInfo ti = HiveUtils.getTypeInfo(wrappedTupleFieldSchema); inputObjectInspector = (StructObjectInspector)HiveUtils.createObjectInspector(ti); try { ObjectInspector[] arguments = new ObjectInspector[inputSchema.size()]; for (int i=0;i<inputSchema.size();i++) { if (constantsInfo!=null && !constantsInfo.isEmpty() && constantsInfo.get(i)!=null) { arguments[i] = constantsInfo.get(i); } else { arguments[i] = inputObjectInspector.getAllStructFieldRefs().get(i).getFieldObjectInspector(); } } outputObjectInspector = evalUDF.initialize(arguments); } catch (Exception e) { throw new IOException(e); } } }