[英]Avro array using Apache Avro
實際上,我的問題類似於下面鏈接中顯示的答案(它顯示了使用AVSC ZDE9B9ED78D7E2E2EEFFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEE7E2F919Z庫的序列化/進行審理),但我將需要使用ZB6EFD606D118D118D1121621616EF6216EFRRO的解決方案來序列化,
https://avro.apache.org/docs/current/gettingstartedjava.html
數據
[
{"id":1,"text":"some text","user_id":1},
{"id":1,"text":"some text","user_id":2},
...
]
架構
{
"name": "Name",
"type": "array",
"namespace": "com.hi.avro.model",
"items": {
"name": "NameDetails",
"type": "record",
"fields": [
{
"name": "id",
"type": "int"
},
{
"name": "text",
"type": "string"
},
{
"name": "user_id",
"type": "int"
}
]
}
}
感謝任何幫助...
我已經開始閱讀 API,並在我的代碼上嘗試一下......
當我創建帖子時,我正在努力將其分配給 GenericRecord,但它不起作用。 所以我發布了這個問題,因為我不清楚。
最后,我沒有將整個數組分配給 GenericRecord,而是繼續使用 GenericArray 並將 GenericRecord 添加到它
以下是代碼片段
//到 json
GenericArray record = new GenericDatumReader<GenericArray>(schema).read(null, binaryDecoder);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
NoWrappingJsonEncoder jsonEncoder = new NoWrappingJsonEncoder(record.getSchema(), outputStream);
DatumWriter<GenericArray> writer = record instanceof SpecificRecord ?
new SpecificDatumWriter<>(record.getSchema()) :
new GenericDatumWriter<>(record.getSchema());
writer.write(record, jsonEncoder);
jsonEncoder.flush();
byte[] result = outputStream.toByteArray();
//到 avro
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(outputStream, null);
GenericDatumWriter<Object> writer = new GenericDatumWriter(schema, genericData);
byte[] data;
List list = mapper.readValue(data, List.class);
GenericRecordBuilder record = new GenericRecordBuilder(schema.getElementType());
List<GenericData.Record> array = new ArrayList<>();
json.forEach(entry -> {
//logic for reading GenericRecord for each of the list should be done here
...
array.add(genericRecord);
});
writer.write(array, encoder);
encoder.flush();
byte[] result = outputStream.toByteArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.