par , 26/08/2018 à 15h40 (1549 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 :

schema tAggregateRow :

Config tAggregateRow :

Tu arrivera au même résultat :

- 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 :

Config tSetGlobalVar :

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 :

résultat :

Mis à jour 09/09/2018 à 16h09 par LittleWhite
(Coloration du code)
- Catégories
-
Java