在 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 中将多个地图组合在一起的主要内容,如果未能解决你的问题,请参考以下文章