volúmenes ventaja utilización una tutorial pig para grandes funciona español datos como comandos análisis hadoop mapreduce apache-pig

hadoop - ventaja - map reduce



Combinando múltiples mapas juntos en Pig (1)

Estoy usando cerdo por primera vez. He llegado al punto en el que tengo exactamente la respuesta que quiero, pero en un formato extrañamente anidado:

{(price,49),(manages,"1d74426f-2b0a-4777-ac1b-042268cab09c")}

Me gustaría que la salida sea un solo mapa, sin ningún ajuste:

[price#49, manages#"1d74426f-2b0a-4777-ac1b-042268cab09c"]

Me las he arreglado para usar TOMAP para llegar hasta aquí, pero no puedo encontrar la manera de fusionarlo y aplanarlo.

{([price_specification#{"amount":49,"currency":"USD"}]),([manages#"newest-nodes/1d74426f-2b0a-4777-ac1b-042268cab09c"])}

¿Cómo debería ir sobre esto?


Desafortunadamente, no hay funciones incorporadas para hacer esto por usted. Tendrás que escribir tu propia UDF. Afortunadamente, este es simple.

El método de exec sería algo así como:

public Map<String, Object> exec(Tuple input) { Map<String, Object> m = new HashMap<String, Object>(); for (int i = 0; i < input.size(); i++) m.putAll((Map<String, Object>) input.get(i)); return m; }

La UDF podría tomar cualquier número de mapas como argumentos.

Tenga en cuenta que si dos o más mapas comparten una clave, la última encontrada será la que se conserva y la otra se sobrescribe.