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;
}