当前位置: 首页 > 知识库问答 >
问题:

avro模式中如何定义byte[]和LocalDateTime?

沈树
2023-03-14

我是Avro架构的新手。我尝试使用kafka发布/消费我的java对象。我有java bean类,它包含LocalDateTime和byte[]的字段。如何在avro架构基元类型中定义两者?我可以用于LocalDateTime的最佳基元类型是什么?

private LocalDateTime timestamp; 
private byte[] content; 

我定义了这样的东西;但是

 {
            "name": "content", "type": "bytes"
         },

类强制转换异常[1]

[1] Caused by: java.lang.ClassCastException: [B can not cast to java.nio.ByteBuffer at org.apache.avro.generic.GenericDatumWriter.writeBytes(GenericDatumWriter.java:219) at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:77) at org.apache.avro.generic.genericDatumWriter.writeField(GenericDatumWriter.java:114) at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:104) atorg.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:66) at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:58)

共有1个答案

阙奇思
2023-03-14

对于byte[],您可以使用miguno所说的bytes原语。对于LocalDateTime对象,您可以通过将其转换为毫秒来将其存储为长原语。Avro还支持逻辑类型,您可以使用它直接反序列化为不属于原语类型的内容。有关更多详细信息和类似于您想要实现的示例,请参阅此处。

 类似资料:
  • 我正在学习kafka connect的教程,我想知道是否有可能为数据来自MySql表的主题定义一个自定义的模式注册表。 我在我json/connect配置中找不到定义它的地方,而且我不想在创建模式后创建一个新版本。 我的MySql表称为站有这个模式 其中,属性包含 Json 数据而不是字符串(我必须使用该类型,因为属性的 Json 字段是可变的。 我的连接器是 并创建该模式 其中“属性”字段当然是

  • 我正在学习kafka connect的教程,我想知道是否有可能接收一些类的类型的消息。 教程:https://www.confluent.io/blog/simplest-useful-kafka-connect-data-pipeline-world-thereabouts-part-1// 基于avro格式,我用Maven生成了一个类。 然后我用我的类型定义了消费者工厂: 和KafkaList

  • 问题内容: 我有一个想要转换为Avro的JSON文档,并且需要为此指定一种模式。这是我要为其定义avro模式的JSON文档: 我可以为非复杂类型定义架构,但不能为复杂的“选项”字段定义架构: 谢谢您的帮助! 问题答案: 您需要使用Avro 复杂类型,尤其是数组和记录。然后将它们嵌套在一起: 另外,为了提高可读性,您可以将架构分为多个文件。

  • 问题内容: 我正在尝试让Python解析如下的Avro模式… …并且出现以下异常: 我究竟做错了什么? 问题答案: 根据网络上的其他消息来源,我将重写您的第二个地址定义:

  • 我希望使用提供的Avro模式而不是Spark自动生成的模式来编写Avro格式的DataFrame。如何告诉Spark在写时使用自定义模式?

  • 我正在从Cloudera包裹中运行带有Spark 0.9.0的CDH 4.4。 我有一堆Avro文件是通过Pig的AvroStorage UDF创建的。我想在 Spark 中加载这些文件,使用通用记录或载入 Avro 文件的架构。到目前为止,我已经尝试过这个: 这适用于一个文件,但它不能扩展——我将所有数据加载到本地RAM中,然后从那里跨spark节点分发。