private static Map toThriftMap()

in pig/src/main/java/com/twitter/elephantbird/pig/util/PigToThrift.java [165:193]


  private static Map<Object, Object> toThriftMap(Field field, Map<String, Object> map) {
    Field keyField   = field.getMapKeyField();
    Field valueField = field.getMapValueField();
    HashMap<Object, Object> out = new HashMap<Object, Object>(map.size());
    for(Entry<String, Object> e : map.entrySet()) {
      String s = e.getKey();
      Object key;
      switch (keyField.getType()) {
        case TType.STRING: key = s; break;
        case TType.BOOL: key = Boolean.parseBoolean(s); break;
        case TType.BYTE: key = Byte.parseByte(s); break;
        case TType.I16: key = Short.parseShort(s); break;
        case TType.I32: key = Integer.parseInt(s); break;
        case TType.I64: key = Long.parseLong(s); break;
        case TType.DOUBLE: key = Double.parseDouble(s); break;
        case TType.ENUM: key = toThriftEnum(keyField, s); break;
        default:
          // LIST, MAP, SET, STOP, STRUCT, VOID types are unsupported
          throw new RuntimeException(String.format(
              "Conversion from string map key to type '%s' is unsupported",
              ThriftUtils.getFieldValueType(keyField).getName()));
      }
      if (keyField.isBuffer()) {
        key = ByteBuffer.wrap(s.getBytes(Charsets.UTF_8));
      }
      out.put(key, toThriftValue(valueField, e.getValue()));
    }
    return out;
  }