IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Netsoro

Talend : Compter le nombre de répétition d'un élément dans un flux

Noter ce billet
par , 26/08/2018 à 14h40 (1087 Affichages)
Je partage ce billet suite a une question posée dans le forum Talend.

Voici mon problème : j'aimerais compté le nombre de fois que mon élément X (compté le nombre de fois que ce répète chaque numéro de téléphone) ce répète à la sortie de mon tMap. Comment faire cela ?
  • Si les numéros de téléphones se trouvent dans une base de données, dans ce cas un composant de lecture de la BDD avec une requête telle que :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Phone,COUNT(*) AS NBF from Phone_client
    WHERE conditions
    GROUP BY Phone;

    Peut être relier au composant tMap soit en relation lookup ou en flux principale.
  • Si les données se trouvent dans un fichier Excel ou plat, on peut utiliser le composant tAggregateRow, par exemple :

    Nom : ph_agg_row.png
Affichages : 178
Taille : 23,7 Ko

    schema tAggregateRow :

    Nom : schema.png
Affichages : 192
Taille : 29,3 Ko

    Config tAggregateRow :

    Nom : config.png
Affichages : 192
Taille : 48,2 Ko

    Tu arrivera au même résultat :

    Nom : resultat.png
Affichages : 161
Taille : 9,0 Ko

  • Une autre solution avec quelques lignes de codes serait d'utiliser une structure de données comme un hashMap, ainsi on déclare le hashMap dans un tJava ou dans un tSetGlobalVar comme ceci :


    Nom : ph_job.PNG
Affichages : 206
Taille : 24,8 Ko

    Config tSetGlobalVar :

    Nom : ph_tSetGVar.PNG
Affichages : 176
Taille : 8,3 Ko

    Dans le tJavaRow on charge les données dans le hashMap :

    Dans le code ci-dessous, s'il trouve un numéro pour la première fois il compte 1, sinon il incrémente et met à jour.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Map<String,Integer> m = (Map<String,Integer>)globalMap.get("m");
     
    if(m.get(input_row.phone_number)==null){
     
    	m.put(input_row.phone_number,1);
    }else{
    	int cpt = 	m.get(input_row.phone_number)+1;
    	m.put(input_row.phone_number,cpt);
    }

    Ensuite, dans le tJavaFlex on parcourt le map pour récupérer les numéros et le nombre de fois où il le trouve dans le fichier, en sortie on branche les composants qu'on veux.

    config tJavaFlex :

    Nom : ph_tjavaflex.PNG
Affichages : 213
Taille : 15,6 Ko

    résultat :

    Nom : ph_res.PNG
Affichages : 173
Taille : 3,6 Ko


Envoyer le billet « Talend : Compter le nombre de répétition d'un élément dans un flux » dans le blog Viadeo Envoyer le billet « Talend : Compter le nombre de répétition d'un élément dans un flux » dans le blog Twitter Envoyer le billet « Talend : Compter le nombre de répétition d'un élément dans un flux » dans le blog Google Envoyer le billet « Talend : Compter le nombre de répétition d'un élément dans un flux » dans le blog Facebook Envoyer le billet « Talend : Compter le nombre de répétition d'un élément dans un flux » dans le blog Digg Envoyer le billet « Talend : Compter le nombre de répétition d'un élément dans un flux » dans le blog Delicious Envoyer le billet « Talend : Compter le nombre de répétition d'un élément dans un flux » dans le blog MySpace Envoyer le billet « Talend : Compter le nombre de répétition d'un élément dans un flux » dans le blog Yahoo

Mis à jour 09/09/2018 à 15h09 par LittleWhite (Coloration du code)

Catégories
Java

Commentaires