ObjectInspector keyObjectInspector = getJavaObjectInspector(type.getTypeParameters().get(0)); ObjectInspector valueObjectInspector = getJavaObjectInspector(type.getTypeParameters().get(1)); return ObjectInspectorFactory.getStandardMapObjectInspector(keyObjectInspector, valueObjectInspector);
private ObjectInspector convertMap(ObjectInspector inspector, AtomicBoolean foundUnion) { MapObjectInspector mapOI = (MapObjectInspector) inspector; ObjectInspector keyOI = convert(mapOI.getMapKeyObjectInspector(), foundUnion); ObjectInspector valueOI = convert(mapOI.getMapValueObjectInspector(), foundUnion); return ObjectInspectorFactory.getStandardMapObjectInspector(keyOI, valueOI); }
@Test public void convertMap() { ObjectInspector inspector = ObjectInspectorFactory .getStandardMapObjectInspector(PrimitiveObjectInspectorFactory.javaStringObjectInspector, unionObjectInspector); Object value = Collections.singletonMap("bar", union); @SuppressWarnings("unchecked") Map<String, Object> result = (Map<String, Object>) underTest.convert(value, inspector); assertThat(result.size(), is(1)); assertThat(result.get("bar"), is((Object) Arrays.asList("foo", null))); }
private ObjectInspector convertMap(ObjectInspector inspector, AtomicBoolean foundUnion) { MapObjectInspector mapOI = (MapObjectInspector) inspector; ObjectInspector keyOI = convert(mapOI.getMapKeyObjectInspector(), foundUnion); ObjectInspector valueOI = convert(mapOI.getMapValueObjectInspector(), foundUnion); return ObjectInspectorFactory.getStandardMapObjectInspector(keyOI, valueOI); }
@Test public void testSortMap() throws HiveException { ObjectInspector[] inputOIs = { ObjectInspectorFactory.getStandardListObjectInspector( ObjectInspectorFactory.getStandardMapObjectInspector( PrimitiveObjectInspectorFactory.writableStringObjectInspector, PrimitiveObjectInspectorFactory.writableIntObjectInspector ) ) }; udf.initialize(inputOIs); Map<Text, IntWritable> m1 = new HashMap<Text, IntWritable>(); m1.put(new Text("a"), new IntWritable(4)); m1.put(new Text("b"), new IntWritable(3)); m1.put(new Text("c"), new IntWritable(1)); m1.put(new Text("d"), new IntWritable(2)); Map<Text, IntWritable> m2 = new HashMap<Text, IntWritable>(); m2.put(new Text("d"), new IntWritable(4)); m2.put(new Text("b"), new IntWritable(3)); m2.put(new Text("a"), new IntWritable(1)); m2.put(new Text("c"), new IntWritable(2)); Map<Text, IntWritable> m3 = new HashMap<Text, IntWritable>(); m3.put(new Text("d"), new IntWritable(4)); m3.put(new Text("b"), new IntWritable(3)); m3.put(new Text("a"), new IntWritable(1)); runAndVerify(asList((Object)m1, m2, m3), asList((Object)m3, m2, m1)); }
@Test public void convertMap() { ObjectInspector inspector = ObjectInspectorFactory .getStandardMapObjectInspector(PrimitiveObjectInspectorFactory.javaStringObjectInspector, unionObjectInspector); ObjectInspector result = underTest.convert(inspector); assertThat(result.getTypeName(), is( ObjectInspectorFactory .getStandardMapObjectInspector( PrimitiveObjectInspectorFactory.javaStringObjectInspector, structObjectInspector) .getTypeName())); }
ObjectInspector valueObjectInspector = getStandardObjectInspectorFromTypeInfo( ((MapTypeInfo) typeInfo).getMapValueTypeInfo()); oi = ObjectInspectorFactory.getStandardMapObjectInspector(keyObjectInspector, valueObjectInspector); break; default:
@Override public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { for (int idx = 0; idx < Math.min(arguments.length, 3); ++idx) { if (arguments[idx].getCategory() != Category.PRIMITIVE || PrimitiveObjectInspectorUtils.getPrimitiveGrouping( ((PrimitiveObjectInspector) arguments[idx]).getPrimitiveCategory()) != PrimitiveGrouping.STRING_GROUP) { throw new UDFArgumentException("All argument should be string/character type"); } } soi_text = ObjectInspectorConverters.getConverter(arguments[0], PrimitiveObjectInspectorFactory.javaStringObjectInspector); if (arguments.length > 1) { soi_de1 = ObjectInspectorConverters.getConverter(arguments[1], PrimitiveObjectInspectorFactory.javaStringObjectInspector); } if (arguments.length > 2) { soi_de2 = ObjectInspectorConverters.getConverter(arguments[2], PrimitiveObjectInspectorFactory.javaStringObjectInspector); } return ObjectInspectorFactory.getStandardMapObjectInspector( PrimitiveObjectInspectorFactory.javaStringObjectInspector, PrimitiveObjectInspectorFactory.javaStringObjectInspector); }
@Test public void testSingleLevelSchemaArrayOfMaps() throws Exception { Iterable<Map<String, Long>> maps = createTestMaps(transform(intsBetween(0, 10), Object::toString), longsBetween(0, 10)); List<List<Map<String, Long>>> values = createTestArrays(maps); ObjectInspector objectInspector = getStandardListObjectInspector(getStandardMapObjectInspector(javaStringObjectInspector, javaLongObjectInspector)); tester.testSingleLevelArraySchemaRoundTrip(objectInspector, values, values, new ArrayType(mapType(VARCHAR, BIGINT))); }
@Test public void testArrayOfMaps() throws Exception { Iterable<Map<String, Long>> maps = createNullableTestMaps(transform(intsBetween(0, 10), Object::toString), longsBetween(0, 10)); List<List<Map<String, Long>>> values = createTestArrays(maps); tester.testRoundTrip(getStandardListObjectInspector(getStandardMapObjectInspector(javaStringObjectInspector, javaLongObjectInspector)), values, values, new ArrayType(mapType(VARCHAR, BIGINT))); }
@Override public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException { for (int idx = 0; idx < Math.min(arguments.length, 3); ++idx) { if (arguments[idx].getCategory() != Category.PRIMITIVE || PrimitiveObjectInspectorUtils.getPrimitiveGrouping( ((PrimitiveObjectInspector) arguments[idx]).getPrimitiveCategory()) != PrimitiveGrouping.STRING_GROUP) { throw new UDFArgumentException("All argument should be string/character type"); } } soi_text = ObjectInspectorConverters.getConverter(arguments[0], PrimitiveObjectInspectorFactory.javaStringObjectInspector); if (arguments.length > 1) { soi_de1 = ObjectInspectorConverters.getConverter(arguments[1], PrimitiveObjectInspectorFactory.javaStringObjectInspector); } if (arguments.length > 2) { soi_de2 = ObjectInspectorConverters.getConverter(arguments[2], PrimitiveObjectInspectorFactory.javaStringObjectInspector); } return ObjectInspectorFactory.getStandardMapObjectInspector( PrimitiveObjectInspectorFactory.javaStringObjectInspector, PrimitiveObjectInspectorFactory.javaStringObjectInspector); }
ObjectInspector keyObjectInspector = getJavaObjectInspector(type.getTypeParameters().get(0)); ObjectInspector valueObjectInspector = getJavaObjectInspector(type.getTypeParameters().get(1)); return ObjectInspectorFactory.getStandardMapObjectInspector(keyObjectInspector, valueObjectInspector);
private static ObjectInspector getObjectInspector(TypeInfo type) throws IOException { switch (type.getCategory()) { case PRIMITIVE: PrimitiveTypeInfo primitiveType = (PrimitiveTypeInfo) type; return PrimitiveObjectInspectorFactory. getPrimitiveJavaObjectInspector(primitiveType); case MAP: MapTypeInfo mapType = (MapTypeInfo) type; MapObjectInspector mapInspector = ObjectInspectorFactory.getStandardMapObjectInspector( getObjectInspector(mapType.getMapKeyTypeInfo()), getObjectInspector(mapType.getMapValueTypeInfo())); return mapInspector; case LIST: ListTypeInfo listType = (ListTypeInfo) type; ListObjectInspector listInspector = ObjectInspectorFactory.getStandardListObjectInspector( getObjectInspector(listType.getListElementTypeInfo())); return listInspector; case STRUCT: StructTypeInfo structType = (StructTypeInfo) type; List<TypeInfo> fieldTypes = structType.getAllStructFieldTypeInfos(); List<ObjectInspector> fieldInspectors = new ArrayList<ObjectInspector>(); for (TypeInfo fieldType : fieldTypes) { fieldInspectors.add(getObjectInspector(fieldType)); } StructObjectInspector structInspector = ObjectInspectorFactory.getStandardStructObjectInspector( structType.getAllStructFieldNames(), fieldInspectors); return structInspector; default: throw new IOException("Unknown field schema type"); } }
ObjectInspectorFactory.getStandardMapObjectInspector( PrimitiveObjectInspectorFactory.writableIntObjectInspector, PrimitiveObjectInspectorFactory.writableIntObjectInspector);
case MAP: MapTypeInfo mti = (MapTypeInfo)ti; result = ObjectInspectorFactory.getStandardMapObjectInspector( PrimitiveObjectInspectorFactory .getPrimitiveJavaObjectInspector(PrimitiveObjectInspector.PrimitiveCategory.STRING),
ObjectInspector keyObjectInspector = getJavaObjectInspector(type.getTypeParameters().get(0)); ObjectInspector valueObjectInspector = getJavaObjectInspector(type.getTypeParameters().get(1)); return getStandardMapObjectInspector(keyObjectInspector, valueObjectInspector);
} else if (bt.isMap()) { DynamicSerDeTypeMap btMap = (DynamicSerDeTypeMap) bt; return ObjectInspectorFactory.getStandardMapObjectInspector( dynamicSerDeStructBaseToObjectInspector(btMap.getKeyType()), dynamicSerDeStructBaseToObjectInspector(btMap.getValueType()));
ObjectInspector struct1ObjectInspector = getStandardStructObjectInspector(struct1FieldNames, asList( getStandardMapObjectInspector(javaIntObjectInspector, javaStringObjectInspector), getStandardListObjectInspector(javaStringObjectInspector), javaIntObjectInspector)); ObjectInspector struct2ObjectInspector = getStandardStructObjectInspector(struct2FieldNames, asList( getStandardMapObjectInspector(javaIntObjectInspector, javaStringObjectInspector), getStandardListObjectInspector(javaStringObjectInspector), struct1ObjectInspector)); ObjectInspector struct3ObjectInspector = getStandardStructObjectInspector(struct3FieldNames, asList( getStandardMapObjectInspector(javaIntObjectInspector, javaDoubleObjectInspector), getStandardListObjectInspector(javaBooleanObjectInspector), javaBooleanObjectInspector)); ObjectInspector struct4ObjectInspector = getStandardStructObjectInspector(struct4FieldNames, asList( getStandardMapObjectInspector(javaIntObjectInspector, javaDoubleObjectInspector), getStandardListObjectInspector(javaBooleanObjectInspector), struct3ObjectInspector)); struct3ObjectInspector, struct4ObjectInspector, getStandardMapObjectInspector(javaIntObjectInspector, javaDoubleObjectInspector), getStandardListObjectInspector(javaBooleanObjectInspector), getStandardMapObjectInspector(javaStringObjectInspector, javaStringObjectInspector));
@Test public void testNullMap() throws HiveException, IOException { ObjectInspector[] inputOIs = { ObjectInspectorFactory.getStandardMapObjectInspector( PrimitiveObjectInspectorFactory.writableStringObjectInspector, PrimitiveObjectInspectorFactory.writableStringObjectInspector), }; Map<String, String> input = null; DeferredObject[] args = { new DeferredJavaObject(input) }; GenericUDFMapValues udf = new GenericUDFMapValues(); StandardListObjectInspector oi = (StandardListObjectInspector) udf.initialize(inputOIs); Object res = udf.evaluate(args); Assert.assertTrue(oi.getList(res).isEmpty()); udf.close(); }
return ObjectInspectorFactory.getStandardMapObjectInspector(keyOI, valueOI);