我有一些Avro数据作为Java中的GenericRecord,我想将其转换为JSON,我注意到有两种方法可以做到这一点:一种涉及使用JsonEncoder,另一个涉及简单地调用GenericRecord上的toString()。经过一些简短的实验,这两种方法似乎产生了相同的结果,并且在任何一种情况下都可以使用JsonDecoder将生成的JSON字符串转换回Avro。所以,我的问题是:两者之间是否存在任何功能差异,是否有任何理由优先使用其中一个?我正在使用Avro1.7.7。 最佳答案 在进一步测试查看Avro源代码后,似乎Gen
我正在尝试简单读取存储在HDFS中的Avro文件。当它在本地文件系统上时,我发现了如何读取它....FileReaderreader=DataFileReader.openReader(newFile(filename),newGenericDatumReader());for(GenericRecorddatum:fileReader){Stringvalue=datum.get(1).toString();System.out.println("value="value);}reader.close();但是,我的文件在HDFS中。我无法为openReader提供路径或FSData
我正在使用Avro,我有一个GenericRecord.我想提取clientId,deviceName,holder从中。在Avro架构中,clientId是整数,deviceName是字符串和holder是一个map。clientId在avro架构中:{"name":"clientId","type":["null","int"],"doc":"hello"}deviceName在avro架构中:{"name":"deviceName","type":["null","string"],"doc":"test"}holder在avro架构中:{"name":"holder","typ
我的KafkaProducer能够使用KafkaAvroSerializer将对象序列化到我的主题。但是,KafkaConsumer.poll()返回反序列化的GenericRecord而不是我的序列化类。MyKafkaProducerKafkaProducerproducer;try(InputStreamprops=Resources.getResource("producer.props").openStream()){Propertiesproperties=newProperties();properties.load(props);properties.put(Produc
AvroSpecificRecord(即生成的java类)是否与模式演变兼容?IE。如果我有Avro消息源(在我的例子中是kafka)并且我想将这些消息反序列化为特定记录,是否可以安全地进行?我看到的:在模式的末尾添加一个字段工作正常-可以反序列化ok到特定记录在中间添加一个字段不会-即破坏现有客户即使消息兼容,这也是一个问题。如果我能找到新的模式(使用例如confluent模式注册表),我可以反序列化为GenericRecord,但似乎没有办法从genericrecord映射到不同模式的specificrecord..MySpecificTypemessage=(TSpecificD
我正在尝试使用avro运行mapreduce,但是在尝试了网络上人们建议的所有选项之后,我仍然无法通过-15/11/0921:54:48警告mapred.LocalJobRunner:job_local1421922570_0001java.lang.Exception:java.lang.NoSuchMethodError:org.apache.avro.generic.GenericData.createDatumWriter(Lorg/apache/avro/Schema;)Lorg/apache/avro/io/DatumWriter;下面是代码(来自Hadoop权威指南)pu