子类化Avro记录?

时间:2014-01-09 19:52:54

标签: oop serialization hadoop avro

我有两种类型的AvroRecords,它们都扩展了avro.SpecificRecord。有没有办法在Java中创建另一个的子类?其中一个是PersonRecord,我希望它的子类是EmployeeRecord。我不想用avro数据填充普通Java类的原因是我使用hadoop并且如果可能的话就想直接使用avro文件。

为了澄清,我感兴趣的是多态性。我希望能够使用一个函数,将PersonRecord作为参数作为EmployeeRecord。

谢谢!

1 个答案:

答案 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... }
    ]
}