@InterfaceAudience.Private @Override public Schema getSchema(SpecificRecord t) { return t.getSchema(); }
/** * Creates a SpecificRecordBuilderBase by copying an existing record instance. * @param other the record instance to copy. */ protected SpecificRecordBuilderBase(T other) { super(other.getSchema(), SpecificData.get()); } }
@InterfaceAudience.Private @Override public DatumReader getReader(Class<SpecificRecord> clazz) { try { return new SpecificDatumReader(clazz.newInstance().getSchema()); } catch (Exception e) { throw new RuntimeException(e); } }
/** * Converts a {@link org.apache.gobblin.metrics.MetricReport} to bytes to send through Kafka. * * <p> * Actual serialized record will be prepended with a schema version generated by {@link #schemaVersionWriter}. * </p> * * @param record MetricReport to serialize. * @return Serialized bytes. */ public synchronized byte[] serializeRecord(T record) { try { this.byteArrayOutputStream.reset(); // Write schema versioning information. this.schemaVersionWriter.writeSchemaVersioningInformation(record.getSchema(), this.out); // Now write the record itself. this.writer.write(record, this.encoder); this.encoder.flush(); return this.byteArrayOutputStream.toByteArray(); } catch (IOException exception) { LOGGER.warn("Could not serialize Avro record for Kafka Metrics.", exception); return null; } }
@Test public void testSpecificSerializeDeserializeFromSchema() throws IOException { final Tuple3<Class<? extends SpecificRecord>, SpecificRecord, Row> testData = AvroTestUtils.getSpecificTestData(); final String schemaString = testData.f1.getSchema().toString(); final AvroRowSerializationSchema serializationSchema = new AvroRowSerializationSchema(schemaString); final AvroRowDeserializationSchema deserializationSchema = new AvroRowDeserializationSchema(schemaString); final byte[] bytes = serializationSchema.serialize(testData.f2); final Row actual = deserializationSchema.deserialize(bytes); assertEquals(testData.f2, actual); }
@Test public void testSerializability() throws Exception { final Tuple3<Class<? extends SpecificRecord>, SpecificRecord, Row> testData = AvroTestUtils.getSpecificTestData(); final String schemaString = testData.f1.getSchema().toString(); // from class final AvroRowSerializationSchema classSer = new AvroRowSerializationSchema(testData.f0); final AvroRowDeserializationSchema classDeser = new AvroRowDeserializationSchema(testData.f0); testSerializability(classSer, classDeser, testData.f2); // from schema string final AvroRowSerializationSchema schemaSer = new AvroRowSerializationSchema(schemaString); final AvroRowDeserializationSchema schemaDeser = new AvroRowDeserializationSchema(schemaString); testSerializability(schemaSer, schemaDeser, testData.f2); }
@Test public void testSpecificSerializeFromSchemaSeveralTimes() throws IOException { final Tuple3<Class<? extends SpecificRecord>, SpecificRecord, Row> testData = AvroTestUtils.getSpecificTestData(); final String schemaString = testData.f1.getSchema().toString(); final AvroRowSerializationSchema serializationSchema = new AvroRowSerializationSchema(schemaString); final AvroRowDeserializationSchema deserializationSchema = new AvroRowDeserializationSchema(schemaString); serializationSchema.serialize(testData.f2); serializationSchema.serialize(testData.f2); final byte[] bytes = serializationSchema.serialize(testData.f2); final Row actual = deserializationSchema.deserialize(bytes); assertEquals(testData.f2, actual); }
@Test public void testSpecificDeserializeFromSchemaSeveralTimes() throws IOException { final Tuple3<Class<? extends SpecificRecord>, SpecificRecord, Row> testData = AvroTestUtils.getSpecificTestData(); final String schemaString = testData.f1.getSchema().toString(); final AvroRowSerializationSchema serializationSchema = new AvroRowSerializationSchema(schemaString); final AvroRowDeserializationSchema deserializationSchema = new AvroRowDeserializationSchema(schemaString); final byte[] bytes = serializationSchema.serialize(testData.f2); deserializationSchema.deserialize(bytes); deserializationSchema.deserialize(bytes); final Row actual = deserializationSchema.deserialize(bytes); assertEquals(testData.f2, actual); }
@Override protected Schema getRecordSchema(Object record) { return ((SpecificRecord)record).getSchema(); }
@InterfaceAudience.Private @Override public Schema getSchema(SpecificRecord t) { return t.getSchema(); }
/** * Creates a SpecificRecordBuilderBase by copying an existing record instance. * @param other the record instance to copy. */ protected SpecificRecordBuilderBase(T other) { super(other.getSchema(), SpecificData.get()); } }
@Override public DatumReader getReader(Class<SpecificRecord> clazz) { try { return new SpecificDatumReader(clazz.newInstance().getSchema()); } catch (Exception e) { throw new RuntimeException(e); } }
@InterfaceAudience.Private @Override public DatumReader getReader(Class<SpecificRecord> clazz) { try { return new SpecificDatumReader(clazz.newInstance().getSchema()); } catch (Exception e) { throw new RuntimeException(e); } }
public boolean equals(SpecificRecord obj1, SpecificRecord that) { if (that == obj1) return true; // identical object if (!(that instanceof SpecificRecord)) return false; // not a record if (obj1.getClass() != that.getClass()) return false; // not same schema return PersistentData.get().compare(obj1, that, obj1.getSchema(), true) == 0; }
@InterfaceAudience.Private @Override public DatumReader getReader(Class<SpecificRecord> clazz) { try { return new SpecificDatumReader(clazz.newInstance().getSchema()); } catch (Exception e) { throw new RuntimeException(e); } }
public static <T extends SpecificRecord> byte[] serialize(T data) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(out, null); DatumWriter<T> writer = new SpecificDatumWriter<>(data.getSchema()); writer.write(data, encoder); encoder.flush(); out.close(); return out.toByteArray(); }
/** * updates the timestamp if the schema has an 'updated' field * @param value */ private void setTimestamp(T value, String field) { Schema.Field f = value.getSchema().getField(field); if (f != null) { value.put(f.pos(), System.currentTimeMillis()); } }
@Override public void put(String row, T value) throws AvroBaseException { Schema schema = value.getSchema(); String schemaKey = getSchemaKey(schema); byte[] bytes = serialize(value); client.set(prekey + row, bytes); client.set(prekey + schemaPrekey + row, schemaKey.getBytes()); }
@Override public void put(String field, Object value) { int fieldPos = specificRecord.getSchema().getField(field).pos(); specificRecord.put(fieldPos, value); }