Avro genericdata.Record忽略数据类型

时间:2015-09-25 15:32:04

标签: scala hadoop record avro

我有以下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:不是有效的架构字段:last_name     at org.apache.avro.generic.GenericData $ Record.put(GenericData.java:125)     在csv2avro $ .main(csv2avro.scala:40)     在csv2avro.main(csv2avro.scala)

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

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