hadoop - tutorial - wikipedia apache hive



Combiner plusieurs cartes ensemble dans Cochon (1)

J'utilise le cochon pour la première fois. Je suis arrivé au point où j'ai exactement la réponse que je veux, mais dans un format étrangement imbriqué:

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

Je voudrais que la sortie soit une seule carte, sans emballage:

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

J'ai réussi à utiliser TOMAP pour aller aussi loin, mais je ne sais pas comment fusionner et l'aplatir.

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

Comment devrais-je m'y prendre?


Malheureusement, il n'y a pas de fonctions intégrées pour le faire pour vous. Vous devrez écrire votre propre UDF. Heureusement, c'est un simple.

La méthode exec irait juste quelque chose comme:

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;
}

L'UDF pourrait prendre n'importe quel nombre de cartes comme arguments.

Notez que si deux cartes ou plus partagent une clé, la dernière rencontrée sera celle qui sera conservée et les autres écrasées.





apache-pig