MapReduce - WritableComparables

Soy nuevo en Java y Hadoop. Estoy probando un programa muy simple para obtener pares frecuentes.

p.ej

Input: My name is Foo. Foo is student. 
Intermediate Output:
    Map:
        (my, name): 1
        (name ,is): 1
        (is, Foo): 2 // (is, Foo) = (Foo, is) 
        (is, student)

Así que finalmente debería dar par frecuente es (is ,Foo).

El pseudocódigo se ve así:

Map(Key: line_num, value: line)
words = split_words(line)
for each w in words:
     for each neighbor x:
          emit((w, x)), 1)

Aquí mi clave no es una, es un par. Mientras revisaba la documentación, leí que para cada nueva clave tenemos que implementar WritableComparable .

Entonces estoy confundido acerca de eso. Si alguien puede explicar sobre esta clase, sería genial. No estoy seguro de que sea realmente cierto. ¡Entonces puedo descubrir por mi cuenta cómo hacerlo!

No quiero ningún código ni mapeador ni nada ... solo quiero entender qué hace este WritableComparable. ¿Qué método de WritableComparable realmente compara claves? Puedo ver iguales y compareTo, pero no puedo encontrar ninguna explicación al respecto. Por favor no hay código! Gracias

EDITAR 1: en compareTo devuelvo 0 para el par (a, b) = (b, a) pero aún no va al mismo reductor, ¿hay alguna manera en el método compareTo? Restablezco la tecla (b, a) a (a, b ) o generar una clave totalmente nueva?

EDIT 2: no sé para generar una nueva clave, pero en comparación con cambiar la lógica, ¡funcionó bien ...! ¡Gracias a todos!

Respuesta 1

Solo estoy usando ONVIF. He descargado "onvifdm-onvif.tar.gz" de http://synesis.ru/en/surveillance/downloads, en el que hay cuatro archivos (onvif.discovery.dll, onvif.services.dll, onvif.session. ...

Estoy desarrollando la aplicación web crm struts en eclipse. Para el envío de correos, creé la cuenta de Mailchimp y la integración de mandril. Encontré una API de envoltorio de terceros (cribbstechnologies-Java-Mandrill -...

Estoy aprendiendo Java. Escribí el siguiente código pero recibo este error "no puedo hacer una referencia estática a un campo de entrada no estático" en Arrayfunction (), cuando intento tomar una entrada. ¿Por qué es esto así y ...

Tengo los siguientes textos: "Los datos de la Rama 1 son correctos - verdaderos" "los datos de la Rama 4 son correctos - falsos" Para cada texto, me gustaría obtener el número de rama y el valor booleano verdadero ...