【问题标题】:Combining Multiple Maps together in Pig在 Pig 中将多个地图组合在一起
【发布时间】:2014-02-14 23:22:32
【问题描述】:

我是第一次使用猪。我已经达到了我想要的答案的地步,但是以一种奇怪的嵌套格式:

{(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"])}

我该怎么办?

【问题讨论】:

    标签: hadoop mapreduce apache-pig


    【解决方案1】:

    很遗憾,没有内置函数可以为您执行此操作。您必须编写自己的 UDF。幸运的是,这很简单。

    exec 方法类似于:

    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 可以采用任意数量的地图作为参数。

    请注意,如果两个或多个映射共享一个键,那么最后遇到的映射将被保留,而其他映射将被覆盖。

    【讨论】:

    • 谢谢,经过多次谷歌搜索,我最终找到了stackoverflow.com/questions/17847970/…。它使用 UDF 提出了与您相同的答案(尽管它使用 python 作为语言)。这个答案最终对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多