我是第一次使用 pig 。我已经达到了我想要的答案的地步,但是采用了一种奇怪的嵌套格式:
{(price,49),(manages,"1d74426f-2b0a-4777-ac1b-042268cab09c")}
我希望输出是一个单一的 map ,没有任何包装:
[price#49, manages#"1d74426f-2b0a-4777-ac1b-042268cab09c"]
我设法使用了
TOMAP
走到这一步,但我不知道如何合并和展平它。{([price_specification#{"amount":49,"currency":"USD"}]),([manages#"newest-nodes/1d74426f-2b0a-4777-ac1b-042268cab09c"])}
我该怎么办?
最佳答案
不幸的是,没有内置函数可以为您执行此操作。您必须编写自己的 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 可以将任意数量的映射作为参数。
请注意,如果两个或多个映射共享一个键,那么遇到的最后一个将是保留的,而其他映射将被覆盖。
关于hadoop - 在 Pig 中将多个 map 组合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21791240/