hadoop - 在 Pig 中将多个 map 组合在一起

标签 hadoop mapreduce apache-pig

我是第一次使用 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/

相关文章:

hadoop - 如何从 Cassandra 加载数据到 HDFS?

hadoop - 使用HDFS代替spark.local.dir

java - 从远程系统提交 mapreduce 作业时出现异常

hadoop - 在 CentOS 7 中安装 Cloudera 管理器时没有可用的软件包 oracle-j2sdk1.7

r - 使用RJDBC从Hive导入数据到R

hadoop - 如果映射器在中途失败并且 Hadoop 重试该映射器,自定义计数器会发生什么

hadoop - Pig 或 Hive 用于文件操作

hadoop - pig FILTER ERROR 1000 : Error during parsing. 遇到

hadoop - Apache Spark history-server 如何引用 Amazon S3?

java - HDFS 缓冲写/读操作