我有两种类型的AvroRecords,它们都扩展了avro.SpecificRecord。有没有办法在Java中创建另一个的子类?其中一个是PersonRecord,我希望它的子类是EmployeeRecord。我不想用avro数据填充普通Java类的原因是我使用hadoop并且如果可能的话就想直接使用avro文件。
为了澄清,我感兴趣的是多态性。我希望能够使用一个函数,将PersonRecord作为参数作为EmployeeRecord。
谢谢!
答案 0 :(得分:5)
我想我理解你要做的事情(“子类”Avro Schema定义文件中的Avro记录)但我不认为这是可能的。
相反,执行此操作的方法是让EmployeeRecord
嵌套在其中的PersonRecord
成员,然后是以下与员工相关的相关信息。例如:
{
"type": "record",
"name": "PersonRecord",
"namespace": "com.yourapp",
"fields": [
{
"name": "first",
"type": "string"
},
{ etc... }
]
}
{
"type": "record",
"name": "EmployeeRecord",
"namespace": "com.yourapp",
"fields": [
{
"name": "PersonInfo",
"type": "PersonRecord"
},
{
"name": "salary",
"type": "int"
},
{ etc... }
]
}