Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Avro genericdata。记录忽略数据类型_Scala_Hadoop_Record_Avro - Fatal编程技术网

Scala Avro genericdata。记录忽略数据类型

Scala Avro genericdata。记录忽略数据类型,scala,hadoop,record,avro,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", "t

我有以下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 位于org.apache.avro.generic.GenericData$Record.put(GenericData.java:125) 在csv2avro$.main处(csv2avro.scala:40) 位于csv2avro.main(csv2avro.scala)


这里发生了什么?

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

Avro在尝试序列化记录时只检查类型和字段名。在您的情况下,模式中没有声明姓氏。