【问题标题】:generating an id/counter for foreach in pig latin在猪拉丁语中为 foreach 生成一个 id/counter
【发布时间】:2011-10-03 15:44:50
【问题描述】:

我希望在遍历记录时在我的 foreach 构造中生成/附加某种唯一标识符/line_number/counter。有没有办法在不编写 UDF 的情况下做到这一点?

B = foreach A 生成 a_unique_id、field1、...等

如何实现“a_unique_id”?

谢谢!

【问题讨论】:

    标签: apache-pig


    【解决方案1】:

    如果您使用的是 pig 0.11 或更高版本,那么 RANK 运算符正是您正在寻找的。例如

    DUMP A;
    (foo,19)
    (foo,19)
    (foo,7)
    (bar,90)
    (etc.,0)
    
    B = RANK A ;
    
    DUMP B ;
    (1,foo,19)
    (2,foo,19)
    (3,foo,7)
    (4,bar,90)
    (5,etc.,0)
    

    【讨论】:

    • RANK 需要 ORDER BY 才能确定
    【解决方案2】:

    在主要的 Pig 发行版或 piggybank 中没有内置的 UUID 函数。不幸的是,我认为您唯一的选择是编写 UDF。

    有一个 standard way of building UUIDs 和 Java 代码,您可以利用它来构建您的 UDF。

    你不想写 UDF 有什么特别的原因吗?

    【讨论】:

    • 谢谢!这可能听起来很傻,但我对 PIG 完全陌生,阅读了几个小时的教程,并认为可能有一些内置的东西可以满足我的目的。我怀疑 UDF 会占用我一些时间。无论如何,我使用 unix 实用程序为每条记录附加一个行号:cat -n。
    • 换行符似乎对我的所有情况都没有帮助。这是原始问题。我想加入两个记录数完全相同但没有匹配键的数据集。我想要的是(逐行或逐记录连接),但我的数据是这样的,连接条件没有唯一键。应避免自然连接或交叉连接。如何“合并”两个数据集的记录?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多