protected GenericSchema(SchemaInfo schemaInfo) { this.schemaInfo = schemaInfo; this.schema = new org.apache.avro.Schema.Parser().parse( new String(schemaInfo.getSchema(), UTF_8) ); this.fields = schema.getFields() .stream() .map(f -> new Field(f.name(), f.pos())) .collect(Collectors.toList()); }
/** * Retrieve the value of the provided <tt>field</tt>. * * @param field the field to retrieve the value * @return the value object */ default Object getField(Field field) { return getField(field.getName()); }
@Override public Object getField(String fieldName) { Object value = record.get(fieldName); if (value instanceof Utf8) { return ((Utf8) value).toString(); } else if (value instanceof org.apache.avro.generic.GenericRecord) { org.apache.avro.generic.GenericRecord avroRecord = (org.apache.avro.generic.GenericRecord) value; org.apache.avro.Schema recordSchema = avroRecord.getSchema(); List<Field> fields = recordSchema.getFields() .stream() .map(f -> new Field(f.name(), f.pos())) .collect(Collectors.toList()); return new GenericAvroRecord(schema, fields, avroRecord); } else { return value; } }
/** * Retrieve the value of the provided <tt>field</tt>. * * @param field the field to retrieve the value * @return the value object */ default Object getField(Field field) { return getField(field.getName()); }
@Override public Object getField(String fieldName) { JsonNode fn = jn.get(fieldName); if (fn.isContainerNode()) { AtomicInteger idx = new AtomicInteger(0); List<Field> fields = Lists.newArrayList(fn.fieldNames()) .stream() .map(f -> new Field(f, idx.getAndIncrement())) .collect(Collectors.toList()); return new GenericJsonRecord(fields, fn); } else if (fn.isBoolean()) { return fn.asBoolean(); } else if (fn.isInt()) { return fn.asInt(); } else if (fn.isFloatingPointNumber()) { return fn.asDouble(); } else if (fn.isDouble()) { return fn.asDouble(); } else { return fn.asText(); } } }
protected GenericSchema(SchemaInfo schemaInfo) { this.schemaInfo = schemaInfo; this.schema = new org.apache.avro.Schema.Parser().parse( new String(schemaInfo.getSchema(), UTF_8) ); this.fields = schema.getFields() .stream() .map(f -> new Field(f.name(), f.pos())) .collect(Collectors.toList()); }
@Override public Object getField(String fieldName) { Object value = record.get(fieldName); if (value instanceof Utf8) { return ((Utf8) value).toString(); } else if (value instanceof org.apache.avro.generic.GenericRecord) { org.apache.avro.generic.GenericRecord avroRecord = (org.apache.avro.generic.GenericRecord) value; org.apache.avro.Schema recordSchema = avroRecord.getSchema(); List<Field> fields = recordSchema.getFields() .stream() .map(f -> new Field(f.name(), f.pos())) .collect(Collectors.toList()); return new GenericAvroRecord(schema, fields, avroRecord); } else { return value; } }
@Override public Object getField(String fieldName) { JsonNode fn = jn.get(fieldName); if (fn.isContainerNode()) { AtomicInteger idx = new AtomicInteger(0); List<Field> fields = Lists.newArrayList(fn.fieldNames()) .stream() .map(f -> new Field(f, idx.getAndIncrement())) .collect(Collectors.toList()); return new GenericJsonRecord(fields, fn); } else if (fn.isBoolean()) { return fn.asBoolean(); } else if (fn.isInt()) { return fn.asInt(); } else if (fn.isFloatingPointNumber()) { return fn.asDouble(); } else if (fn.isDouble()) { return fn.asDouble(); } else { return fn.asText(); } } }