Avro-Tools JSON到Avro Schema失败:org.apache.avro.SchemaParseException:未定义的名称:

时间:2014-03-16 21:08:41

标签: avro

我正在尝试使用av​​ro-tools-1.7.4.jar create schema命令创建两个Avro架构。

我有两个JSON模式,如下所示:

{
 "name": "TestAvro",
 "type": "record",
 "namespace": "com.avro.test",
 "fields": [
    {"name": "first",     "type": "string"},
    {"name": "last",      "type": "string"},
    {"name": "amount",     "type": "double"} 
 ]
}


{
 "name": "TestArrayAvro",
 "type": "record",
 "namespace": "com.avro.test",
 "fields": [
    {"name": "date",     "type": "string"},
    {"name": "records",  "type":      
           {"type":"array","items":"com.avro.test.TestAvro"}}
    ]
 }

当我在这两个文件上运行create schema时,第一个工作正常并生成java。第二个每次都失败了。当我尝试使用第一个Schema作为类型时,它不喜欢数组项。这是我得到的错误:

Exception in thread "main" org.apache.avro.SchemaParseException: Undefined name: "com.test.avro.TestAvro"
at org.apache.avro.Schema.parse(Schema.java:1052)

两个文件都位于相同的路径目录中。

1 个答案:

答案 0 :(得分:5)

使用以下avsc文件:

[{
    "name": "TestAvro",
    "type": "record",
    "namespace": "com.avro.test",
    "fields": [
        {
            "name": "first",
            "type": "string"
        },
        {
            "name": "last",
            "type": "string"
        },
        {
            "name": "amount",
            "type": "double"
        }
    ]
},
{
    "name": "TestArrayAvro",
    "type": "record",
    "namespace": "com.avro.test",
    "fields": [
        {
            "name": "date",
            "type": "string"
        },
        {
            "name": "records",
            "type": {
                "type": "array",
                "items": "com.avro.test.TestAvro"
            }
        }
    ]
}]