在 Pig 中将多个地图组合在一起

Posted

技术标签:

【中文标题】在 Pig 中将多个地图组合在一起【英文标题】:Combining Multiple Maps together in 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"])

我该怎么办?

【问题讨论】:

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

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

【讨论】:

谢谢,经过多次谷歌搜索,我最终找到了***.com/questions/17847970/…。它使用 UDF 提出了与您相同的答案(尽管它使用 python 作为语言)。这个答案最终对我有用。

以上是关于在 Pig 中将多个地图组合在一起的主要内容,如果未能解决你的问题,请参考以下文章

Pig - 地图缩减模式下的权限被拒绝

PIG 加载 CSV - 地图类型错误

Pig - 如何迭代一袋地图

将多个数组合并到一个地图中

pig 不使用 PigStorage 加载地图数据

多个 Google 地图无法与 Bootstrap 3 选项卡一起使用