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