Como ha dicho, una posibilidad es escribir dos trabajos para hacer esto. Primer trabajo: Ejemplo simple de conteo de palabras
Segundo trabajo: Hace la parte de clasificación.
El pseudo código podría ser:
Nota: El archivo de salida generada por el primer trabajo será la entrada para el segundo trabajo
Mapper2(String _key, Intwritable _value){
//just reverse the position of _value and _key. This is useful because reducer will get the output in the sorted and shuffled manner.
emit(_value,_key);
}
Reduce2(IntWritable valueofMapper2,Iterable<String> keysofMapper2){
//At the reducer side, all the keys that have the same count are merged together.
for each K in keysofMapper2{
emit(K,valueofMapper2); //This will sort in ascending order.
}
}
También puede ordenar en orden descendente para los cuales es factible escribir una clase de comparación por separado, lo que hará el truco. Incluir comparador dentro del trabajo como:
Job.setComparatorclass(Comparator.class);
Este comparador será ordenar los valores en orden descendente antes de enviar a un lado reductor. Entonces en el reductor, solo emite los valores.
Esta pregunta es bastante antigua, así que solo comentaré: Se puede hacer muy fácilmente en pig: a = load '/ out/wordcount' as (word: chararray, num: int); b = ordenar a por num; tienda b en '/ out/wordcount-sorted'; – wlk