2011-03-29 4 views
5

Supposons que j'ai le schéma suivant:Question peuplant dossiers imbriqués dans Avro en utilisant un GenericRecord

{ 
"name" : "Profile", 
"type" : "record", 
"fields" : [ 
    { "name" : "firstName", "type" : "string" }, 
    { "name" : "address" , "type" : { 
    "type" : "record", 
    "name" : "AddressUSRecord", 
    "fields" : [ 
    { "name" : "address1" , "type" : "string" }, 
    { "name" : "address2" , "type" : "string" }, 
    { "name" : "city" , "type" : "string" }, 
    { "name" : "state" , "type" : "string" }, 
    { "name" : "zip" , "type" : "int" }, 
    { "name" : "zip4", "type": "int" } 
    ] 
    } 
} 
] 
} 

J'utilise un GenericRecord pour représenter chaque profil qui est créé. Pour ajouter un prénom, il est facile de faire ce qui suit:

Schema sch = Schema.parse(schemaFile); 
DataFileWriter<GenericRecord> fw = new DataFileWriter<GenericRecord>(new GenericDatumWriter<GenericRecord>()).create(sch, new File(outFile)); 
GenericRecord r = new GenericData.Record(sch); 
r.put(“firstName”, “John”); 
fw.append(r); 

Mais comment définir la ville, par exemple? Comment représenter la clé sous la forme d'une chaîne que la méthode r.put peut comprendre?

Merci

Répondre

10

Pour le schéma ci-dessus:

GenericRecord t = new GenericData.Record(sch.getField("address").schema()); 
t.put("city","beijing"); 
r.put("address",t); 
Questions connexes