2011-08-26 9 views
6

Estaba jugando con Mahout y encontró que la FileDataModel acepta datos en el formatoMahout: Para leer un archivo de entrada personalizado

 userId,itemId,pref(long,long,Double). 

tengo algunos datos que tiene el formato

 String,long,double 

Lo es el mejor/más fácil método para trabajar con este conjunto de datos en Mahout?

Respuesta

1

Suponiendo que su entrada cabe en la memoria, repásela. Rastree la ID de cada cadena en un diccionario. Si no cabe en la memoria, use ordenar y luego agrupar para lograr la misma idea.

en Python:

import sys

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) 
+2

Hay un componente en Mahout que hace este tipo de automágicamente, llamado 'IDMigrator', pero también recomendaría traducir a ID numéricos externamente. –

3

Una forma de hacer esto es mediante la creación de una extensión de FileDataModel. Tendrá que anular el método readUserIDFromString(String value) para usar algún tipo de resolver la conversión. Puede usar una de las implementaciones de IDMigrator, como sugiere Sean.

Por ejemplo, suponiendo que tiene una inicializado MemoryIDMigrator, usted puede hacer esto:

@Override 
protected long readUserIDFromString(String stringID) { 
    long result = memoryIDMigrator.toLongID(stringID); 
    memoryIDMigrator.storeMapping(result, stringID); 
    return result; 
} 

De esta manera se podría utilizar memoryIDMigrator para hacer el mapeo inverso, también. Si no lo necesita, puede hacerlo de la forma en que se hace en su implementación (está en AbstractIDMigrator).

3

userId y itemId pueden ser cadenas, por lo this is the CustomFileDataModel que convertirá la cadena en un entero y mantendrá el mapa (String, Id) en la memoria; después de las recomendaciones, puedes obtener una cadena de identificación.

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. –

+0

@ moskito-x gracias por la sugerencia. – KlwntSingh

Cuestiones relacionadas