AvroRuntimeException: неизвестный тип данных org.joda.time.DateTime - вновь - PullRequest
0 голосов
/ 11 октября 2019

Я знаю, что уже есть некоторые темы, касающиеся вышеупомянутой ошибки, но я все еще имею ее, несмотря на то, что:

  1. Я обновил Avro с 1.8.2 до 1.9.1. Предположительно, согласно этому веб-сайту: https://issues.apache.org/jira/browse/AVRO-1891, проблема уже была решена в 1.9.1.
  2. Мое поле метки времени не может быть пустым. Некоторые (большинство?) Люди, которые столкнулись с этой проблемой, сообщили, что она исчезла после того, как они удалили условие о том, что отметка времени может быть нулевой. В моем случае поле определяется как:
{
   "name": "processingTime", "type": {
        "type": "long",
        "logicalType": "timestamp-millis"
}
Я думал о вставке следующего фрагмента кода. Это было взято с сайта, упомянутого выше:
final RecordV1 record = new RecordV1(DateTime.parse("2007-12-03T10:15:30.00Z"));
        final SpecificData specificData = new SpecificData();
        specificData.addLogicalTypeConversion(new TimeConversions.TimestampConversion());
        final DatumWriter<RecordV1> datumWriter = new SpecificDatumWriter<>(record.getSchema(), specificData);
        final ByteArrayOutputStream stream = new ByteArrayOutputStream(AvroUtil.DEFAULT_BUFFER_SIZE);
        final BinaryEncoder encoder = EncoderFactory.get().directBinaryEncoder(stream, null);
        datumWriter.write(record, encoder);
        encoder.flush();
        final byte[] bytes = stream.toByteArray();

Но я не знаю, куда его поместить (какой класс?), И я не уверен, будет ли он работать с экземпляромGenericRecord (созданный из схемы, считанной из реестра схемы)

Попытка решения, упомянутого здесь: Kafka AVRO - преобразование из long в datetime , но не удалось найти класс, в который я должен вставить (изменить) этот фрагмент кода. Я также не уверен, будет ли он работать с экземпляром GenericRecord, потому что он имеет дело с SpecificRecord.
...