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.