web-dev-qa-db-fra.com

Comment créer un schéma contenant une liste d'objets en utilisant Avro?

Quelqu'un sait-il comment créer un schéma Avro contenant une liste d'objets d'une classe?

Je veux que mes classes générées ressemblent à celles ci-dessous:

class Child {
    String name;
}

class Parent {
    list<Child> children;
}

Pour cela, j’ai écrit une partie du fichier de schéma mais je ne sais pas comment dire à Avro de créer une liste d’objets de type Children?

Mon fichier de schéma se présente comme suit:

{
    "name": "Parent",
    "type":"record",
    "fields":[
        {
            "name":"children",
            "type":{
                "name":"Child",
                "type":"record",
                "fields":[
                    {"name":"name", "type":"string"}
                ]
            }
        }
    ] 
}

Maintenant, le problème est que je peux marquer le champ children comme type ou tableau de Child mais je ne sais pas comment le marquer comme une classe array of objects of type Child?

Quelqu'un peut-il aider s'il vous plait?

20
Shekhar

Vous devez utiliser array type pour créer la liste . Voici le schéma mis à jour qui gère votre cas d'utilisation.

{
    "name": "Parent",
    "type":"record",
    "fields":[
        {
            "name":"children",
            "type":{
                "type": "array",  
                "items":{
                    "name":"Child",
                    "type":"record",
                    "fields":[
                        {"name":"name", "type":"string"}
                    ]
                }
            }
        }
    ] 
}
37
Kapil Balagi

J'ai eu la classe suivante et le plugin avro maven a généré deux classes en conséquence:

public class Employees{
    String accountNumber;
    String address;
    List<Account> accountList;    
}

public class Account {
    String accountNumber;
    String id;
}

Format de fichier Avro:

{
    "type": "record",
    "namespace": "com.mypackage",
    "name": "AccountEvent",
    "fields": [
        {
            "name": "accountNumber",
            "type": "string"
        },
        {
            "name": "address",
            "type": "string"
        },
        {
            "name": "accountList",
            "type": {
                "type": "array",
                "items":{
                    "name": "Account",
                    "type": "record",
                    "fields":[
                        {   "name": "accountNumber",
                            "type": "string"
                        },
                        {   "name": "id",
                            "type": "string"
                        }
                    ]
                }
            }
        }
    ]
}
0
Smart Coder