簡體   English   中英

Avro 陣列使用 Apache Avro

[英]Avro array using Apache Avro

實際上,我的問題類似於下面鏈接中顯示的答案(它顯示了使用AVSC ZDE9B9ED78D7E2E2EEFFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEEFEE7E2F919Z庫的序列化/進行審理),但我將需要使用ZB6EFD606D118D118D1121621616EF6216EFRRO的解決方案來序列化,

Json 陣列的 Avro 架構

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM