Apache Avro为序列化提供了紧凑、快速、二进制数据格式和丰富的数据结构。但是,它要求用户为需要序列化的对象定义一个模式(在JSON中)。
在某些情况下,这是不可能的(例如:Java对象的类有一些成员的类型是外部库中的外部Java类)。因此,我想知道是否有一个工具可以从对象的.class文件中获取信息,并为该对象生成Avro模式(就像Gson使用对象的.class信息将某个对象转换为JSON字符串)。
看看Java反射API。
获取架构如下所示:
Schema schema = ReflectData.get().getSchema(T);
请参阅Doug关于另一个问题的示例,以获得一个工作示例。
这个答案的功劳属于肖恩巴斯比。
我有一个带有日期的简单POJO,在导入Google BigQuery之前,它将作为Avro存储在存储器中。日期转换为long,我试图使用@AvroSchema覆盖日期字段的模式生成,以便BigQuery了解字段的类型。 简单的POJO: 这最终得到以下AVRO-Schema: 这些似乎是错误的,应该是简单的{“name”:“tm”,“type”:“long”,“logicalType”:“time
有没有办法从Apache spark生成无模式的avro?我可以看到一种使用apache avro库通过Java/Scala和融合avro生成它的方法。当我用下面的方式从Spark编写Avro时,它用模式创建了Avro。我想在没有模式的情况下创建,以减少最终数据集的大小。
我正在尝试使用以下方法在运行时获取Avro模式: 但由于我的POJO类包含以下泛型: 我得到以下例外情况: 我知道Avro不会支持泛型类型。是否有一种方法可以在运行时生成架构时从类中省略某些类字段?
我目前正在尝试使用JOOQ基于我现有的postgresdb生成类。在我的约克。xml config I省略了任何inputSchema标记,以便JOOQ生成它找到的所有模式: 但是,我想从生成的内容中排除信息模式。有没有办法以黑名单的方式做到这一点?还是必须为除信息模式之外的所有模式添加输入模式?
假设我有一个lombok注释类 我知道我能做到: 类似于: 我在龙目岛的文件里找不到这个。
问题内容: 构建器模式是创建不可变对象的流行方法,但是创建构建器有一些编程开销。所以我想知道为什么不简单地使用config对象。 生成器的用法如下所示: 显然,这是非常易读和简洁的,但是您必须实现构建器: 我的想法是,通过使用像这样的简单配置对象来减少代码: 用法: 这种用法需要多几行,但也很容易理解,但是实现起来要简单得多,对于不熟悉构建器模式的人来说,也许更容易理解。顺便说一句:这个模式有名称