Esempio n. 1
0
  @Override
  public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
    GenericUDFUtils.ReturnObjectInspectorResolver returnOIResolver;
    returnOIResolver = new GenericUDFUtils.ReturnObjectInspectorResolver(true);

    if (arguments.length != 1) {
      throw new UDFArgumentLengthException(
          "The function SORT_ARRAY(array(obj1, obj2,...)) needs one argument.");
    }

    switch (arguments[0].getCategory()) {
      case LIST:
        if (((ListObjectInspector) (arguments[0]))
            .getListElementObjectInspector()
            .getCategory()
            .equals(Category.PRIMITIVE)) {
          break;
        }
      default:
        throw new UDFArgumentTypeException(
            0,
            "Argument 1"
                + " of function SORT_ARRAY must be "
                + serdeConstants.LIST_TYPE_NAME
                + "<"
                + Category.PRIMITIVE
                + ">, but "
                + arguments[0].getTypeName()
                + " was found.");
    }

    ObjectInspector elementObjectInspector =
        ((ListObjectInspector) (arguments[0])).getListElementObjectInspector();
    argumentOIs = arguments;
    converters = new Converter[arguments.length];
    ObjectInspector returnOI = returnOIResolver.get();
    if (returnOI == null) {
      returnOI = elementObjectInspector;
    }
    converters[0] = ObjectInspectorConverters.getConverter(elementObjectInspector, returnOI);

    return ObjectInspectorFactory.getStandardListObjectInspector(returnOI);
  }
Esempio n. 2
0
  @Override
  public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {

    if (arguments.length % 2 != 0) {
      throw new UDFArgumentLengthException("Arguments must be in key/value pairs");
    }

    GenericUDFUtils.ReturnObjectInspectorResolver keyOIResolver =
        new GenericUDFUtils.ReturnObjectInspectorResolver(true);
    GenericUDFUtils.ReturnObjectInspectorResolver valueOIResolver =
        new GenericUDFUtils.ReturnObjectInspectorResolver(true);

    for (int i = 0; i < arguments.length; i++) {
      if (i % 2 == 0) {
        // Keys
        if (!(arguments[i] instanceof PrimitiveObjectInspector)) {
          throw new UDFArgumentTypeException(
              1, "Primitive Type is expected but " + arguments[i].getTypeName() + "\" is found");
        }
        if (!keyOIResolver.update(arguments[i])) {
          throw new UDFArgumentTypeException(
              i,
              "Key type \""
                  + arguments[i].getTypeName()
                  + "\" is different from preceding key types. "
                  + "Previous key type was \""
                  + arguments[i - 2].getTypeName()
                  + "\"");
        }
      } else {
        // Values
        if (!valueOIResolver.update(arguments[i])
            && !compatibleTypes(arguments[i], arguments[i - 2])) {
          throw new UDFArgumentTypeException(
              i,
              "Value type \""
                  + arguments[i].getTypeName()
                  + "\" is different from preceding value types. "
                  + "Previous value type was \""
                  + arguments[i - 2].getTypeName()
                  + "\"");
        }
      }
    }

    ObjectInspector keyOI =
        keyOIResolver.get(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
    ObjectInspector valueOI =
        valueOIResolver.get(PrimitiveObjectInspectorFactory.javaStringObjectInspector);

    converters = new Converter[arguments.length];

    for (int i = 0; i < arguments.length; i++) {
      converters[i] =
          ObjectInspectorConverters.getConverter(arguments[i], i % 2 == 0 ? keyOI : valueOI);
    }

    return ObjectInspectorFactory.getStandardMapObjectInspector(keyOI, valueOI);
  }