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>