gpt4 book ai didi

java - 水槽 : Avro event deserializer To Elastic Search

转载 作者:行者123 更新时间:2023-11-30 09:07:04 24 4
gpt4 key购买 nike

我想获取由 AVRO 反序列化器创建的记录并将其发送到 ElasticSearch。我意识到我必须编写自定义代码来执行此操作。

使用 LITERAL 选项,我得到了 JSON 模式,这是使用 GenericRecord 的第一步。但是,纵观整个 AVRO Java API,我看不到对一条记录使用 GenericRecord 的方法。所有示例都使用 DataFileReader。

简而言之,我无法从 Flume 事件中获取字段。

有人做过吗?TIA。

最佳答案

我想通了。我做了以下事情:

// Get the schema
String strSchema = event.getHeader("flume.avro.schema.literal");
// Get the body
byte[] body = event.getBody();

// Create the avro schema
Schema schema = Schema.Parser.parse(strSchema);

// Get the decoder to use to get the "record" from the event stream in object form
BinaryDecoder decoder = DecoderFactory.binaryDecoder(body, null);

// Get the datum reader
GenericDatumReader reader = new GenericDatumReader(schema);

// Get the Avro record in object form
GenericRecord record = reader.read(null, decoder);

// Now you can iterate over the fields
for (Schema.Field field : schema.getFields()) {
Object value = record.get(field.name());

// Code to add field to JSON to send to ElasticSearch not listed
// ...

} // for (Schema.Field field : schema.getFields()) {

这很有效。

关于java - 水槽 : Avro event deserializer To Elastic Search,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24153092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com