【问题标题】:Merging two datasets in Pig在 Pig 中合并两个数据集
【发布时间】:2013-01-11 12:10:11
【问题描述】:

我有一个 pig 脚本,我在其中加载一个数据集,将其放入两个单独的数据集,然后执行一些计算,最后向其中添加另一个计算字段。现在我想加入这两个数据集。

A = LOAD '/user/hdfs/file1' AS (a:int, b:int);

A1 = FILTER A BY a > 100;
A2 = FILTER A BY a <= 100 AND b > 100;

-- Now I do some calculation on A1 and A2

所以本质上,在计算之后,这是两者的架构:

{A1 : {a:int, b:int, type:chararray}}
{A2:  {a:int, b:int, type:chararray}}

现在,在将其转储回 HDFS 之前,我想将两个数据集合并回来。 SQL 中的 UNION ALL 之类的东西。我该怎么做?

【问题讨论】:

标签: hadoop apache-pig piglet


【解决方案1】:

UNION 应该为您工作 - 但您的原始架构与显示的输出不匹配(b 加载为 chararray,稍后变为 int) - 我假设这是一个错字。

如果元组具有不同顺序的字段,您可以在执行 UNION 时使用 ONSCHEMA 关键字:

A_MERGED = UNION ONSCHEMA A1, A2;

EDIT 链接到 UNION 的 PigLatin 文档

【讨论】:

  • 糟糕。错误。现在更正了。
  • 在这种情况下,执行 UNION 时不需要 ONSCHEMA 关键字。
  • ONSCHEMA有什么意义?
  • 来自 UNION 文档:Use the ONSCHEMA clause to base the union on named fields (rather than positional notation). All inputs to the union must have a non-unknown (non-null)。因此,如果两个集合具有相同的字段名称,但没有它,但顺序不同,您会得到奇怪的结果
【解决方案2】:

你可以使用 SPLIT

SPLIT A INTO A1 IF a > 100, A2 IF a <= 100 AND b > 100;
A = UNION A1, A2;

【讨论】:

    猜你喜欢
    • 2013-08-13
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多