如何使用avro Java库将Base64编码的AVRO内容转换为JSON

时间:2019-02-07 12:46:52

标签: java hbase avro avro-tools

我对Avro数据格式不熟悉。但是我陷入了一个问题。我正在使用Stargate API从HBase数据读取记录。 HBase中的数据存储为AVRO格式。因此,当我从HBase检索列内容时,我得到了一个Java字符串,其中包含以Base-64编码格式的AVRO数据。

现在,我正在尝试将此包含Base-64编码的AVRO数据的Java字符串转换为包含JSON格式的相同数据的Java字符串。但是我没有成功。

以下是我正在使用的代码:

String respStr = kerberosRestTemplate.getForObject(URL, String.class); //Reading from HBase
        LinkedHashMap map = objectMapper.readValue(respStr.getBytes(), LinkedHashMap.class);
        String encodeddata = (String) PropertyUtils.getProperty(map, "(Row)[0].(Cell)[0].$"); //Reading the Value from the HBase Record
        processAvroMessage(new ByteArrayInputStream(Base64.getDecoder().decode(encodeddata.getBytes())));

private void processAvroMessage(ByteArrayInputStream is)
            throws Exception {
        DatumReader<GenericRecord> reader = new GenericDatumReader<GenericRecord>();
        DataFileStream<GenericRecord> dataFileReader = new DataFileStream<GenericRecord>(is, reader);
        GenericRecord consumedDatum = null;
        while (dataFileReader.hasNext()) {
            consumedDatum = dataFileReader.next(consumedDatum);
            System.out.println(consumedDatum.toString());
        }
        is.close();
        dataFileReader.close();
    }

但是无论我如何尝试在Base64解码后读取此AVRO数据,我总是会收到以下异常:

java.io.IOException: Not a data file.
    at org.apache.avro.file.DataFileStream.initialize(DataFileStream.java:105) ~[avro-1.8.2.jar:1.8.2]
    at org.apache.avro.file.DataFileStream.<init>(DataFileStream.java:84) ~[avro-1.8.2.jar:1.8.2]

我们非常感谢您的帮助。我的AVRO模式是否有可能在编码的AVRO数据中丢失?如果是,如何不通过编程方式进行验证?

0 个答案:

没有答案