Je jouais avec Mahout et je constatais que le FileDatamodel accepte des données dans le format J'ai quelques données qui est du format p> Quelle est la méthode la mieux / la plus simple pour fonctionner avec cet ensemble de données sur mahout? p> p>
3 Réponses :
En supposant que votre entrée convient à la mémoire, boucle à travers elle. Suivez l'identifiant pour chaque chaîne dans un dictionnaire. Si cela ne correspond pas à la mémoire, utilisez TRY SLOY, puis en groupe pour accomplir la même idée.
en Python: P>
Importer SYS P>
import sys next_id = 0 str_to_id = {} for line in sys.stdin: fields = line.strip().split(',') this_id = str_to_id.get(fields[0]) if this_id is None: next_id += 1 this_id = next_id str_to_id[fields[0]] = this_id fields[0] = str(this_id) print ','.join(fields)
Il y a un composant dans Mahout qui fait ce type d'automatiquement, appelé idmigrator code>, mais je recommanderais également de traduire en identifiant numérique à l'extérieur.
Une façon de le faire est de créer une extension de FileDatamodel . Vous aurez besoin de remplacer le ReadUserAdfromstring (valeur de chaîne) Méthode pour utiliser une sorte de résolveur faire la conversion. Vous pouvez utiliser l'une des implémentations de Idmigrator , comme suggère Sean.
Par exemple, en supposant que vous avez un Memhmigrator , vous pouvez le faire: P>
@Override protected long readUserIDFromString(String stringID) { long result = memoryIDMigrator.toLongID(stringID); memoryIDMigrator.storeMapping(result, stringID); return result; }
userid and itemID peut être une chaîne, donc Ceci est le personnageFileDatamodel qui convertira votre chaîne en entiers et gardera la carte (chaîne, id) en mémoire; Après des recommandations, vous pouvez obtenir une chaîne d'ID. P>