在猪拉丁语中为 foreach 生成一个 id/counter
Posted
技术标签:
【中文标题】在猪拉丁语中为 foreach 生成一个 id/counter【英文标题】:generating an id/counter for foreach in pig latin 【发布时间】:2011-10-03 15:44:50 【问题描述】:我希望在遍历记录时在我的 foreach 构造中生成/附加某种唯一标识符/line_number/counter。有没有办法在不编写 UDF 的情况下做到这一点?
B = foreach A 生成 a_unique_id、field1、...等
如何实现“a_unique_id”?
谢谢!
【问题讨论】:
【参考方案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。 换行符似乎对我的所有情况都没有帮助。这是原始问题。我想加入两个记录数完全相同但没有匹配键的数据集。我想要的是(逐行或逐记录连接),但我的数据是这样的,连接条件没有唯一键。应避免自然连接或交叉连接。如何“合并”两个数据集的记录?以上是关于在猪拉丁语中为 foreach 生成一个 id/counter的主要内容,如果未能解决你的问题,请参考以下文章
尝试在猪中加载文件,但每次都会出现此问题。警告 IMPLICIT_CAST_TO_FLOAT 2 次
在 MyBatis 3 中为 HashMap 参数嵌套 foreach