Как преобразовать закодированный в Base64 AVRO контент в JSON с помощью avro Java библиотеки - PullRequest
0 голосов
/ 07 февраля 2019

Я не знаком с форматом данных Avro.Но я застрял в проблеме.Я читаю записи из данных HBase с помощью API Stargate.Данные хранятся в HBase в формате AVRO.Итак, когда я получил содержимое столбца из HBase, у меня появилась строка Java, содержащая данные AVRO в кодированном формате Base-64.

Теперь я пытаюсь преобразовать эту строку Java, содержащую AVRO-данные в кодировке Base-64, в строку Java, содержащую те же данные в формате JSON.Однако я не добился успеха.

Ниже приводится код, который я использую:

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();
    }

Но независимо от того, как я пытаюсь прочитать эти данные AVRO после декодирования Base64, я всегда получаю следующее исключение:

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?Если да, как я могу проверить это, не делая этого программно?

...