У меня есть сценарий, в котором я хочу создать файл avro со столбцом отметки времени, который будет выглядеть следующим образом: 2016-11-16 06: 43: 19.77
Я использовал avro-1.8.2.jar для записи файла avro. Это прекрасно работает для примитивных типов записей, но для логического типа, такого как отметка времени и миллис.
Схема:
{
"type": "record",
"name": "MyRecord",
"namespace": "org.demo",
"fields": [
{
"name": "timestamp_with_logical_type",
"type": {
"type": "long",
"logicalType": "timestamp-millis"
}
},
{
"name": "timestamp_no_logical_type",
"type": "long"
}
]
}
Java-код:
//Instantiating the GenericRecord class.
GenericRecord record = new Record(schema);
long millis = Instant.now().toEpochMilli();
//Insert data according to schema
record.put("timestamp_with_logical_type", new Timestamp(millis));
record.put("timestamp_no_logical_type", millis);
DataFileWriter<GenericRecord> dataFileWriter = null;
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<GenericRecord>(schema);
dataFileWriter = new DataFileWriter<GenericRecord>(datumWriter);
dataFileWriter.setCodec(CodecFactory.snappyCodec());
dataFileWriter.setFlushOnEveryBlock(true);
dataFileWriter.setSyncInterval(32);
dataFileWriter.create(SCHEMA,new File("E:\\MyFiles\\Avro_Data\\demo.avro"));
dataFileWriter.append(record);
dataFileWriter.close();
Приведенный выше код дает следующее исключение:
Exception in thread "main" org.apache.avro.file.DataFileWriter$AppendWriteException: java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.lang.CharSequence
at org.apache.avro.file.DataFileWriter.append(DataFileWriter.java:308)
at AvroFileReaderWriter.writeToAvro(AvroFileReaderWriter.java:264)
at AvroFileReaderWriter.main(AvroFileReaderWriter.java:74)
Caused by: java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.lang.CharSequence
at org.apache.avro.generic.GenericDatumWriter.writeString(GenericDatumWriter.java:267)
at org.apache.avro.generic.GenericDatumWriter.writeString(GenericDatumWriter.java:262)
at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:128)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:75)
at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:166)
at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:156)
at org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:118)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:75)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:62)
at org.apache.avro.file.DataFileWriter.append(DataFileWriter.java:302)
... 2 more