/** * Returns a {@link org.apache.gobblin.fork.CopyableGenericRecord} wrapper around the given {@link GenericRecord}. * {@inheritDoc} * @see org.apache.gobblin.converter.Converter#convertRecord(java.lang.Object, java.lang.Object, org.apache.gobblin.configuration.WorkUnitState) */ @Override public Iterable<CopyableGenericRecord> convertRecord(CopyableSchema outputSchema, GenericRecord inputRecord, WorkUnitState workUnit) throws DataConversionException { return new SingleRecordIterable<>(new CopyableGenericRecord(inputRecord)); } }
@Test public void testCopy() throws CopyNotSupportedException { GenericRecord record = new GenericData.Record(new Schema.Parser().parse(AVRO_SCHEMA)); record.put("name", "foo"); record.put("favorite_number", 68); record.put("favorite_colors", Arrays.asList("blue", "black", "red")); CopyableGenericRecord copyableGenericRecord = new CopyableGenericRecord(record); GenericRecord copy = copyableGenericRecord.copy(); Assert.assertEquals(record, copy); copy.put("name", "bar"); Assert.assertNotEquals(record, copy); } }
@Override public Iterable<CopyableGenericRecord> convertRecord(CopyableSchema schema, String inputRecord, WorkUnitState workUnit) throws DataConversionException { JsonElement element = GSON.fromJson(inputRecord, JsonElement.class); Map<String, Object> fields = GSON.fromJson(element, FIELD_ENTRY_TYPE); try { Schema avroSchema = schema.copy(); GenericRecord record = new GenericData.Record(avroSchema); for (Map.Entry<String, Object> entry : fields.entrySet()) { if (entry.getValue() instanceof Double) { // Gson reads the integers in the input Json documents as doubles, so we have // to convert doubles to integers here as the Avro schema specifies integers. record.put(entry.getKey(), ((Double) entry.getValue()).intValue()); } else { record.put(entry.getKey(), entry.getValue()); } } return new SingleRecordIterable<CopyableGenericRecord>(new CopyableGenericRecord(record)); } catch (CopyNotSupportedException cnse) { throw new DataConversionException(cnse); } } }
/** * Returns a {@link org.apache.gobblin.fork.CopyableGenericRecord} wrapper around the given {@link GenericRecord}. * {@inheritDoc} * @see org.apache.gobblin.converter.Converter#convertRecord(java.lang.Object, java.lang.Object, org.apache.gobblin.configuration.WorkUnitState) */ @Override public Iterable<CopyableGenericRecord> convertRecord(CopyableSchema outputSchema, GenericRecord inputRecord, WorkUnitState workUnit) throws DataConversionException { return new SingleRecordIterable<>(new CopyableGenericRecord(inputRecord)); } }