/** * The initialize method is called only once during the lifetime of the UDF. * * <p>Method checks for the validity (number, type, etc) of the arguments being passed to the UDF. * It also sets the return type of the result of the UDF, in this case the ObjectInspector * equivalent of Map<String,Object> * * @param arguments * @return ObjectInspector Map<String,Object> * @throws UDFArgumentException */ @Override public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { if (arguments.length != 1) { throw new UDFArgumentLengthException( "The HostNormalizerUDF takes an array with only 1 element as argument"); } // we are expecting the parameter to be of String type. ObjectInspector arg = arguments[0]; int argIndex = 0; if (arg.getCategory() != Category.PRIMITIVE) { throw new UDFArgumentTypeException( argIndex, "A string argument was expected but an argument of type " + arg.getTypeName() + " was given."); } // Now that we have made sure that the argument is of primitive type, we can get the primitive // category PrimitiveCategory primitiveCategory = ((PrimitiveObjectInspector) arg).getPrimitiveCategory(); if (primitiveCategory != PrimitiveCategory.STRING) { throw new UDFArgumentTypeException( argIndex, "A string argument was expected but an argument of type " + arg.getTypeName() + " was given."); } // Instantiate the Webrequest webrequest = Webrequest.getInstance(); argumentOI = (StringObjectInspector) arg; List<String> fieldNames = new LinkedList<>(); List<ObjectInspector> fieldOIs = new LinkedList<>(); int idx = 0; fieldNames.add("project_class"); fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector); IDX_PROJECT_CLASS = idx++; fieldNames.add("project"); fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector); IDX_PROJECT = idx++; fieldNames.add("qualifiers"); fieldOIs.add( ObjectInspectorFactory.getStandardListObjectInspector( PrimitiveObjectInspectorFactory.javaStringObjectInspector)); IDX_QUALIFIERS = idx++; fieldNames.add("tld"); fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector); IDX_TLD = idx++; result = new Object[idx]; return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldOIs); }