programmation map-reduce

a marqué ce sujet comme résolu.

Bonsoir chers amis je suis un peu novice dans le paradigme de programmation map-reduce, comme exemple en classe on a fait le world count et j’ai traiter moi meme quelques exercices de ce genre mais j’ai un probléme concernant un exercice. Dans l’exercice on a le numéro d’un utilisateur et le numero de ces amis et on demande de trouver pour chaque couple d’utilisateur le nombre d’amis en commun et la liste des amis. Quand on avait fait le world count on avait utiliser:

for line in sys.stdin: et on a fait les traitement

Mais le souci dans mon exercice la liste des amis ne tient pas sur une seule ligne donc si j’essaie de faire comme le world count ça ne passera pas bien.

par exemple voici le fichier: 15 2 3 4 5 6 7 8 9 12 16 18 20 23 24 26 27 28 29 30 31 32 33 34 35 36 41 42 43 47 50 53 55 56 57 59 61 62 65 72 73 76 77 81 83 84 85 87 88 89 92 93 97 99

pour l’utilisateur 15 ce sont ces amis qui sont les suivants ça ne tiens pas sur une ligne.

Pourriez vous m’aider? Merci d’avance.

l’objectif c’est de developper un programme map-reduce permettant de trouver pour chaque couple d’utilisateur le nombre d’amis en commun et la liste de ces amis. POur ce la j’ai a ma disposition un fichier .txt dans lequel ce trouve le numero de l’utilisateur et ensuite le numero de ces amis, comme l’extrait j’ai montrer dans le premier poste.

le problème c’est que je voulais procéder comme on fesait avec le wordcount. c’est a dire:

for line in sys.stdin: et je fais les traitements.

Mais je vois que si je lis par ligne il’y aura des erreurs car les amis d’un utilisateur ne tiens pas sur seule ligne c’est ça mon problème.

Je ne comprends pas ce que tu veux dire par « ne tient pas sur une ligne » et en quoi ça peut provoquer des erreurs.

Au pire des petits problèmes d’affichage si la ligne est plus longue que la largeur du terminal, mais à part ça ?

Je me réexplique.

par exemple voici le fichier:

1 2 3 4 5 6 7 8 9 12 16 18 20 23 24 26 27 28 29 30 31 32 33 34 35 36 41 42 43 47 50 53 55 56 57

59 61 62 65 72 73 76 77 81 83 84 85 87 88 89 92 93 97 99

2 45 14 87 96 52 41 24 78 52 124 45 6 312 1 4 5 6 8 4 3 9 64

les deux premières lignes sont les amis de l’utilisateur 1. le numéro de l’utilisateur est le tous premiers et ensuite celle de ces amis. Mon souci c’est que si je lis mon fichier ligne par ligne comment je sais que j’ai fini de lire les amis de l’utilisateur 1 si la ligne de ces amis ne tient pas sur une seule ligne. Merci

Soit tu es trompé par le « text wrapping » du terminal ou de ton éditeur de texte, et tes séquences sont bien chacune sur une seule ligne malgré ce que te montre l’affichage.
Soit les séquences sont séparées par un caractère ou une suite de caractères, comme une ligne vide par exemple.

Sinon il serait impossible de déterminer où s’arrête une séquence, à moins de connaître leur longueur à l’avance.

[edit] Quoique… Tu peux effectivement savoir qu’une séquence s’arrête à la deuxième occurrence du numéro d’un « ami ».

+0 -0

Oui entwanne les séquences sont ordonnées par rapport aux numéros d’utilisateur je voulais me basé sur ce fait pour résoudre le problème, mais je me suis dis et si ce n’était pas ordonner comment le ferais je?

NON Nohar je n’est pas de ligne blanche entre les séquences.

Merci encore pour vos idées.

l’objectif c’est de développer un programme map-reduce permettant de trouver pour chaque couple d’utilisateur le nombre d’amis en commun et la liste de ces amis. Pour ce la j’ai a ma disposition un fichier .txt dans lequel ce trouve le numéro de l’utilisateur qui est première position et ensuite le numéro de ces amis.

1 2 3 4 5 6 7 8 9 12 16 18 20 23 24 26 27 28 29 30 31 32 33 34 35 36 41 42 43 47 50 53 55 56 57 59 61 62 65 72 73 76 77 81 83 84 85 87 88 89 92 93 97 99 4 5 6 8 4 3 9 64

2 45 14 87 96 52 41 24 78 52 124 45 6 312 1 4 5 6 8 4 3 9 64 21 56 47 89 56 21 35 12 28 29 30 31 32 33 34 35 36 41 42 43 47 50 53 55 56 57

Les deux premières lignes correspondent a celle de l’utilisateur 1 on voit bien sont numéro en première position.

Les deux deuxième lignes correspondent a celle de l’utilisateur 2 on voit bien sont numéro en premiére position.

Et ainsi de suite mais il faut savoir que dans mon fichier originale il n’y a pas de ligne blanche qui sépare les lignes entre les utilisateurs. Lorsqu’on a fini de lister les amis d’un utilisateur on revient a la ligne et le numéro du suivant et ces amis.

Est-ce qu’on pourrait avoir accès au fichier texte en question pour s’assurer de son format, et notamment trouver les réponses aux différentes questions posées sur le sujet (notamment si les amis d’un même utilisateur sont vraiment écrits sur deux lignes différentes, ou si c’est simplement l’éditeur de texte / le terminal qui tronque le résultat pour l’afficher sur la ligne suivante).

Lorsqu’on a fini de lister les amis d’un utilisateur on revient a la ligne et le numéro du suivant et ces amis.

’\n’

Tu lis tout le fichier d’un coup, tu split sur l’antislash-n et bam tu as tes listes (et tu resplit sur l’espace pour avoir les amis en faisant un set en slicant [1:])

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte