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 :
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](https://www.developpez.net/forums/attachment.php?attachmentid=406726&d=1535287822)
schema tAggregateRow :
![Nom : schema.png
Affichages : 192
Taille : 29,3 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=406733&d=1535288038)
Config tAggregateRow :
![Nom : config.png
Affichages : 192
Taille : 48,2 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=406729&d=1535287973)
Tu arrivera au même résultat :
![Nom : resultat.png
Affichages : 161
Taille : 9,0 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=406737&d=1535288138)
- 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](https://www.developpez.net/forums/attachment.php?attachmentid=406738&d=1535288217)
Config tSetGlobalVar :
![Nom : ph_tSetGVar.PNG
Affichages : 176
Taille : 8,3 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=406739&d=1535288239)
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.
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](https://www.developpez.net/forums/attachment.php?attachmentid=406741&d=1535288284)
résultat :
![Nom : ph_res.PNG
Affichages : 173
Taille : 3,6 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=406742&d=1535288310)
Mis à jour 09/09/2018 à 15h09 par LittleWhite
(Coloration du code)
- Catégories
-
Java