在猪拉丁语中为 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的主要内容,如果未能解决你的问题,请参考以下文章

如何在猪拉丁语脚本中没有前导零时将值转换为 hhmm 格式

尝试在猪中加载文件,但每次都会出现此问题。警告 IMPLICIT_CAST_TO_FLOAT 2 次

如何在我的猪脚本中设置多行字符串?

在 MyBatis 3 中为 HashMap 参数嵌套 foreach

在 laravel 错误中为 foreach() 提供的参数无效(查看:我看不到 $value

请帮助:“在Wordpress中为foreach()提供了无效的参数”