具有不同字段的Json文件中的Json到Avro转换
在将具有不同字段的Json文件中的Json到Avro转换,json,avro,parquet,Json,Avro,Parquet,在将JSON文件转换为avro格式之前,我遇到了一个问题。但是在这种情况下,JSON数据具有不同的字段值,例如: {"a":"x1", "b":"x2": "c":"x3"} {"b":"x4", "d":"x5"} 我有一个工作代码来转换文件,其中每个条目中的字段保持不变。但是作为一种模式定义语言,avro无法支持上述数据(具有不同的字段) 我有一个基本问题,在这种情况下,是否可以使用模式并将其转换为avro格式?或者有没有其他工具可以用来完成这项任务 一种方法是创建一个模式,该模
JSON
文件转换为avro格式
之前,我遇到了一个问题。但是在这种情况下,JSON
数据具有不同的字段值,例如:
{"a":"x1", "b":"x2": "c":"x3"}
{"b":"x4", "d":"x5"}
我有一个工作代码来转换文件,其中每个条目中的字段保持不变。但是作为一种模式定义语言,avro
无法支持上述数据(具有不同的字段)
我有一个基本问题,在这种情况下,是否可以使用模式并将其转换为avro格式?或者有没有其他工具可以用来完成这项任务 一种方法是创建一个模式,该模式是所有可能字段的超集,并将没有的字段保留为null(我认为这就是您在问题中所暗示的方法。null是由Avro中的联合定义的,因此看起来像这样
{
“类型”:“记录”,
“名称空间”:“com.mycompany”,
“名称”:“我的记录”,
“字段”:[
{
“姓名”:“a”,
“类型”:[“字符串”,“空”]
},
{
“名称”:“b”,
“类型”:[“字符串”,“空”]
},
{
“姓名”:“c”,
“类型”:[“字符串”,“空”]
}
]
}
如果不可能预先知道所有字段,另一种方法是使用类似
{
“类型”:“记录”,
“名称空间”:“com.mycompany”,
“名称”:“我的记录”,
“字段”:[
{
“名称”:“TheFields”,
“类型”:“地图”,
“值”:“字符串”
}
]
}
但这只有在所有字段都是相同类型的情况下才有效,并且您必须编写自己的代码来解析JSON并将其放入映射中
这些是我能想到的唯一选项。在Avro中没有XML模式的等价物。严格的模式一致性是设计固有的