복붙노트

[HADOOP] 돼지에서 함께 여러지도를 결합

HADOOP

돼지에서 함께 여러지도를 결합

나는 처음으로 돼지를 사용하고 있습니다. 나는 그러나 이상하게 중첩 된 형식으로, 내가 원하는 정확히 답을 가지고있는 점에 왔 :

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

나는 어떤 포장하지 않고, 하나의지도로 출력을하고 싶습니다 :

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

나는 여기까지 얻을 수 TOMAP을 사용하여 관리했습니다,하지만 난 병합하고 그것을 멀리 평평하게하는 방법을 알아낼 수 없습니다.

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

어떻게 이것에 대해 갈 것인가?

해결법

  1. ==============================

    1.불행하게도, 당신을 위해이 작업을 수행 할 내장 함수가 없습니다. 당신은 당신의 자신의 UDF를 작성해야합니다. 다행히, 이것은 단순한 하나입니다.

    불행하게도, 당신을 위해이 작업을 수행 할 내장 함수가 없습니다. 당신은 당신의 자신의 UDF를 작성해야합니다. 다행히, 이것은 단순한 하나입니다.

    간부 인 방법은 뭔가를 갈 것입니다 :

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

    UDF를 인수로지도의 수를 걸릴 수 있습니다.

    두 개 이상의 맵이 키를 공유하는 경우, 다음 발생하는 마지막 하나는 유지하고 다른 사람이 덮어 얻을 수있는 하나 않습니다.

  2. from https://stackoverflow.com/questions/21791240/combining-multiple-maps-together-in-pig by cc-by-sa and MIT license