我有一个带有日期的简单POJO,在导入Google BigQuery之前,它将作为Avro存储在存储器中。日期转换为long,我试图使用@AvroSchema覆盖日期字段的模式生成,以便BigQuery了解字段的类型。
简单的POJO:
public class SomeAvroMessage implements Serializable {
@AvroSchema("{\"type\":\"long\",\"logicalType\":\"timestamp-millis\"}")
private long tm;
@AvroSchema("{\"type\":\"long\",\"logicalType\":\"timestamp-millis\"}")
private long created;
public SomeAvroMessage() {
}
}
这最终得到以下AVRO-Schema:
{"type":"record","name":"SomeAvroMessage",
"namespace":"some.namespace",
"fields":[
{"name":"tm","type":{"type":"long","logicalType":"timestamp-millis"}},
{"name":"created","type":{"type":"long","logicalType":"timestamp-millis"}}
]}
这些似乎是错误的,应该是简单的{“name”:“tm”,“type”:“long”,“logicalType”:“timestamp millis”}
这在Google数据流中使用,Apache Beam 2.22是用Java编写的。
我错过了什么吗?
如文件所示:
逻辑类型是Avro原语或复杂类型,具有额外的属性来表示派生类型。逻辑类型必须始终存在属性logicalType,并且是具有本节后面列出的逻辑类型之一名称的字符串。可以为特定的逻辑类型定义其他属性。
本文档还提供了avro模式中日期类型的示例:
{
"type": "int",
"logicalType": "date"
}
基本上您的模式是正确的,每次您需要使用一些逻辑类型时,您都可以像这样构建您的模式。
值{“name”:“tm”,“type”:{“type”:“long”,“logicalType”:“timestamp millis”}
是正确的。如果我们将其扩展到更清晰的伪代码,它是:
Field {
name: "tm",
type: Schema {
type: "long",
logicalType: "timestamp-millis"
}
}
您可以看到该字段有一个name
和一个type
。Avro字段的type
必须是Avro模式。logicalType
字段位于模式内部,而不是与它相邻。
有没有办法从Apache spark生成无模式的avro?我可以看到一种使用apache avro库通过Java/Scala和融合avro生成它的方法。当我用下面的方式从Spark编写Avro时,它用模式创建了Avro。我想在没有模式的情况下创建,以减少最终数据集的大小。
Apache Avro为序列化提供了紧凑、快速、二进制数据格式和丰富的数据结构。但是,它要求用户为需要序列化的对象定义一个模式(在JSON中)。 在某些情况下,这是不可能的(例如:Java对象的类有一些成员的类型是外部库中的外部Java类)。因此,我想知道是否有一个工具可以从对象的.class文件中获取信息,并为该对象生成Avro模式(就像Gson使用对象的.class信息将某个对象转换为JSON
我使用https://github . com/confluent Inc/confluent-Kafka-python/blob/master/examples/avro _ producer . py中的示例代码将数据加载到主题中。我只做了一个更改,那就是我添加了“default”:为了模式兼容性,每个字段都为null。它加载得很好,因为我可以在http://localhost:9021/中看
我正在尝试使用以下方法在运行时获取Avro模式: 但由于我的POJO类包含以下泛型: 我得到以下例外情况: 我知道Avro不会支持泛型类型。是否有一种方法可以在运行时生成架构时从类中省略某些类字段?
问题内容: 我正在创建一些类来处理各种类型的文件共享(nfs,afp,s3,本地磁盘)等中的文件名。当用户输入时,会得到一个标识数据源(即或)的字符串。 我从具有通用代码的基类中继承特定文件系统。我感到困惑的是对象创建。我有以下内容: 我以为这会很好用,但我读过的大多数文章都劝阻它。有没有更公认的方法来解决此问题? 问题答案: 我 不 认为用做你想要的东西是不正确的。换句话说,我不同意这个问题)的
我想知道我是否可以使用Confluent Schema registry来生成(然后将其发送给kafka)无模式的avro记录?如果是,请有人分享一些资源?我在Confluent网站和Google上找不到任何例子。 我有一个简单分隔的文件,我有一个单独的模式,目前我正在使用Avro通用记录模式来序列化Avro记录并通过Kafka发送它。这样,模式仍然附加了记录,这使得它更笨重。我的逻辑是,如果在从