6
votes

Mahout: Pour lire un fichier d'entrée personnalisé

Je jouais avec Mahout et je constatais que le FileDatamodel accepte des données dans le format xxx

J'ai quelques données qui est du format xxx

Quelle est la méthode la mieux / la plus simple pour fonctionner avec cet ensemble de données sur mahout?


0 commentaires

3 Réponses :


1
votes

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)


1 commentaires

Il y a un composant dans Mahout qui fait ce type d'automatiquement, appelé idmigrator , mais je recommanderais également de traduire en identifiant numérique à l'extérieur.



3
votes

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;
}


0 commentaires

3
votes

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.


0 commentaires