avro genericdata.record忽略数据类型

dm7nw8vv  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(433)

我有下面的avro模式

{ "namespace": "example.avro",
  "type": "record",
  "name": "User",
  "fields": [
            {"name": "name", "type": "string"},
            {"name": "favorite_number",  "type": ["int", "null"]},
            {"name": "favorite_color", "type": ["string", "null"]}
            ]
 }

我使用以下代码片段来设置一个记录

val schema = new Schema.Parser().parse(new File("data/user.avsc"))
val user1 = new GenericData.Record(schema)  //strangely this schema only checks for valid fields NOT types.
user1.put("name", "Fred")
user1.put("favorite_number", "Jones")

我本以为这将无法根据模式进行验证
当我添加行时

user1.put("last_name", 100)

它会生成一个运行时错误,这也是我在第一种情况下所期望的。
线程“main”org.apache.avro.avroruntimeexception中出现异常:不是有效的架构字段:位于org.apache.avro.generic.genericdata$record.put(genericdata)的姓。java:125)在csv2avro$.main(csv2avro。scala:40)位于csv2avro.main(csv2avro.scala)
这是怎么回事?

2ic8powd

2ic8powd1#

它在将其添加到记录时不会失败,在尝试序列化时会失败,因为它在尝试匹配类型时正处于该点。据我所知,这是唯一一个进行类型检查的地方。

相关问题