- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个场景,我想创建具有时间戳列的 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
最佳答案
我认为你需要使用 Instant 而不是 Timestamp,所以在 java 代码中:
Java 代码:
//Instantiating the GenericRecord class.
GenericRecord record = new Record(schema);
Instant millis = Instant.now();
//Insert data according to schema
record.put("timestamp_with_logical_type", millis));
record.put("timestamp_no_logical_type", millis.toEpochMilli());
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();
关于java - 如何使用java将timestamp-millis logicalType序列化为avro文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56445267/
我如何在 Swift 谓词中组合混合 AND OR 条件。我有以下查询 Select * from tblTemp where dept == 1 && (subdept == 11 || subd
我有一个生成实体的工具,我需要生成用于测试的 samlpe 值。问题是我们有很多逻辑类型(一些类型相同但仍然不同)并且在编码之前我想知道是否有人有更简单的解决方案...... 这是枚举: public
嘿 avro 用户和专家, 我想使用avro逻辑类型,意味着我自己创建一些 - 不仅仅是使用内置的。 问题是如何让编译器从模式生成代码以使用我自己创建的代码。 我创建了我的架构(相关部分): {
我需要能够标记 AVRO 架构中的某些字段,以便在序列化时对它们进行加密。 逻辑类型允许标记字段,并且与自定义转换一起应该允许让它们被 AVRO 透明地加密。 我在查找有关如何在 AVRO 中定义和使
我正在尝试使用以下简单的代码读取 Parquet 文件: ParquetReader reader = AvroParquetReader.builder(path).build()); Ge
我是一名优秀的程序员,十分优秀!