/** Called to create new array instances. Subclasses may override to use a * different array implementation. By default, this returns a {@link * GenericData.Array}.*/ @SuppressWarnings("unchecked") protected Object newArray(Object old, int size, Schema schema) { if (old instanceof Collection) { ((Collection) old).clear(); return old; } else return new GenericData.Array(size, schema); }
private Object serializeList(ListTypeInfo typeInfo, ListObjectInspector fieldOI, Object structFieldData, Schema schema) throws AvroSerdeException { List<?> list = fieldOI.getList(structFieldData); List<Object> deserialized = new GenericData.Array<Object>(list.size(), schema); TypeInfo listElementTypeInfo = typeInfo.getListElementTypeInfo(); ObjectInspector listElementObjectInspector = fieldOI.getListElementObjectInspector(); Schema elementType = schema.getElementType(); for(int i = 0; i < list.size(); i++) { deserialized.add(i, serialize(listElementTypeInfo, listElementObjectInspector, list.get(i), elementType)); } return deserialized; }
@Override Object convertField(JsonElement value) { if (this.isNullable() && value.isJsonNull()) { return null; } List<Object> list = new ArrayList<>(); for (JsonElement elem : (JsonArray) value) { list.add(getElementConverter().convertField(elem)); } return new GenericData.Array<>(arraySchema(), list); }
@Test /** check that GenericArray.reset() retains reusable elements and that GenericArray.prune() cleans * them up properly. */ public void testGenericArrayPeek() { Schema elementSchema = SchemaBuilder.record("element").fields().requiredString("value").endRecord(); Schema arraySchema = Schema.createArray(elementSchema); GenericRecord record = new GenericData.Record( elementSchema ); record.put("value", "string"); GenericArray<GenericRecord> list = new GenericData.Array<GenericRecord>(1, arraySchema); list.add(record); list.reset(); assertTrue( record == list.peek() ); list.prune(); assertNull( list.peek() ); }
@Test public void testArraySet() { Schema schema = Schema.createArray(Schema.create(Schema.Type.INT)); GenericArray<Integer> array = new GenericData.Array<>(10, schema); array.clear(); for(int i=0; i<10; ++i) array.add(i); assertEquals(10, array.size()); assertEquals(new Integer(0), array.get(0)); assertEquals(new Integer(5), array.get(5)); assertEquals(new Integer(5), array.set(5, 55)); assertEquals(10, array.size()); assertEquals(new Integer(55), array.get(5)); }
public void map(LongWritable key, Text value, OutputCollector<AvroWrapper<Pair<Long,GenericData.Record>>,NullWritable> out, Reporter reporter) throws IOException { GenericData.Record optional_entry = new GenericData.Record(createInnerSchema("optional_field_1")); optional_entry.put("optional_field_1", 0L); GenericData.Array<GenericData.Record> array = new GenericData.Array<>(1, createArraySchema()); array.add(optional_entry); GenericData.Record container = new GenericData.Record(createSchema()); container.put("Optional", array); out.collect(new AvroWrapper<>(new Pair<>(key.get(), container)), NullWritable.get()); } }
private GenericRecord generateRecordWithArrays() { ArrayList<Schema.Field> fields = new ArrayList<Schema.Field>(); String fieldName = "array1"; Schema fieldSchema = Schema.createArray(Schema.create(Schema.Type.STRING)); String docString = "doc"; fields.add(new Schema.Field(fieldName, fieldSchema, docString, null)); Schema schema = Schema.createRecord("name", docString, "test", false); schema.setFields(fields); GenericData.Record record = new GenericData.Record(schema); GenericData.Array<String> arr = new GenericData.Array<>(2, fieldSchema); arr.add("foobar"); arr.add("foobaz"); record.put("array1", arr); return record; } }
@Test public void testArrayReversal() { Schema schema = Schema.createArray(Schema.create(Schema.Type.INT)); GenericArray<Integer> forward = new GenericData.Array<>(10, schema); GenericArray<Integer> backward = new GenericData.Array<>(10, schema); for (int i = 0; i <= 9; i++) { forward.add(i); } for (int i = 9; i >= 0; i--) { backward.add(i); } forward.reverse(); assertTrue(forward.equals(backward)); }
/** Called to create new array instances. Subclasses may override to use a * different array implementation. By default, this returns a {@link * GenericData.Array}.*/ @SuppressWarnings("unchecked") protected Object newArray(Object old, int size, Schema schema) { if (old instanceof GenericArray) { ((GenericArray)old).reset(); return old; } else if (old instanceof Collection) { ((Collection) old).clear(); return old; } else return new GenericData.Array(size, schema); }
@Test(expected=AvroRuntimeException.class) public void testArrayConstructorWrongSchema() throws Exception { new GenericData.Array<>(1, Schema.create(Schema.Type.INT)); }
@Test(expected=AvroRuntimeException.class) public void testArrayConstructorNullSchema() throws Exception { new GenericData.Array<>(1, null); }
@Test public void testArray() throws Exception { String json = "{\"type\":\"array\", \"items\": \"long\"}"; Schema schema = Schema.parse(json); Collection<Long> array = new GenericData.Array<>(1, schema); array.add(1L); check(new File(DIR.getRoot(), name.getMethodName()),json, "[1]", array); array = new ArrayList<>(1); array.add(1L); check(new File(DIR.getRoot(), name.getMethodName()),json, "[1]", array); checkParseError("{\"type\":\"array\"}"); // items required }
private static byte[] getSerializedDelta(Schema schema, GenericRecord delta) throws IOException { DefaultConfigurationManagerTest.fillComplexFullResyncDelta(delta); GenericRecord deltaHandler = new GenericData.Record(schema.getElementType()); deltaHandler.put("delta", delta); GenericArray<GenericRecord> array = new GenericData.Array<GenericRecord>(1, schema); array.add(deltaHandler); GenericAvroConverter<GenericArray<GenericRecord>> converter = new GenericAvroConverter<GenericArray<GenericRecord>>(schema); return converter.encode(array); }
/** * Processes array type. * * @return generated value for input array type. */ private Object processArray() { Schema elementTypeSchema = Schema.create(Type.NULL); return new GenericData.Array<>(0, Schema.createArray(elementTypeSchema)); }
@Test public void testArray() throws Exception { String json = "{\"type\":\"array\", \"items\": \"long\"}"; Schema schema = Schema.parse(json); GenericArray<Long> a1 = new GenericData.Array<>(1, schema); a1.add(1L); GenericArray<Long> a2 = new GenericData.Array<>(1, schema); a2.add(1L); a2.add(0L); check(json, a1, a2); }
public static void fillArrayItemRemoveDelta(GenericRecord delta) { GenericArray testField1 = new GenericData.Array(1, getArraySchema(delta, "testField1")); byte[] rawUuidToRemove = new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; GenericFixed uuidToRemove = new GenericData.Fixed(getSchemaByFullName( testField1.getSchema().getElementType().getTypes(), "org.kaaproject.configuration.uuidT"), rawUuidToRemove); testField1.add(uuidToRemove); delta.put("testField1", testField1); }
@Test public void testGetStringArrayUtf8() throws IOException { // Expectation: Even though we read an Avro object with UTF8 underneath, the accessor converts it into a // Java String List<String> expectedQuotes = ImmutableList.of("abc", "defg"); GenericData.Array<Utf8> strings = new GenericData.Array<Utf8>(2, Schema.createArray(Schema.create(Schema.Type.STRING))); expectedQuotes.forEach(s -> strings.add(new Utf8(s))); record.put("favorite_quotes", strings); Assert.assertEquals(accessor.getGeneric("favorite_quotes"), expectedQuotes); }
@Override public void setStringArray(String fieldName, List<String> value) { GenericData.Array<String> avroArray = new GenericData.Array<>( Schema.createArray(Schema.create(Schema.Type.STRING)), value); set(fieldName, avroArray); }
@Override Object convertField(JsonElement value) { List<Object> list = new ArrayList<>(); for (JsonElement elem : (JsonArray) value) { list.add(getElementConverter().convertField(elem)); } return new GenericData.Array<>(schema(), list); }
private GenericArray<String> buildTestArray() { Schema s = Schema.createArray(Schema.create(Schema.Type.STRING)); GenericArray<String> arr = new GenericData.Array<>(3, s); arr.add("one"); arr.add("two"); arr.add("three"); return arr; }