apache pig中的嵌套组

Posted

技术标签:

【中文标题】apache pig中的嵌套组【英文标题】:Nested Groups in apache pig 【发布时间】:2013-06-07 05:45:48 【问题描述】:

我是 apache pig 的新手,希望通过编写 pig 脚本来实现自下而上的立方体。 但是,这需要我以分层方式进行分组。

例如,如果我的数据采用 (exchange,symbol,date,dividend) 形式,其中股息是衡量标准,其余是维度,我想首先按交易所对数据进行分组并打印汇总股息,然后再进一步通过交换和符号等。

一种方法是在脚本中编写所有可能的分组,例如按交换分组、按符号分组、按(交换、符号)分组等。然而,这似乎并不理想。有没有办法(例如)首先按交易所进行分组,然后对于每个交易所组,在内部按符号进行分组以生成(交易所)和(交易所,符号)的聚合,因为这样会更有效。

这里讨论了类似的东西,但它没有回答我的问题:Can I generate nested bags using nested FOREACH statements in Pig Latin? 谢谢!

【问题讨论】:

您能否提供您期望的输出样本。您想要每个组排列一个输出目录,还是只需要一个文件,每行中的每个组都有一个总计? 【参考方案1】:

这一切都取决于您对“最佳”的定义。您的直觉是,如果您首先按(交易所,符号,股息)进行粒度分组,然后将结果分组以通过(交易所,符号)获得,那么从(交易所)获得的结果在某种意义上是正确的你会做更少的算术运算。但是,您的 map-reduce 流程显然不是最佳的。这将需要 3 个 map-reduce 作业,每个输出提供下一个输入。

如果您独立进行每个分组,您将只需要一个 map-reduce 作业。 mapper 将为每个分组发出键值对,reducer 将分别处理每种类型的聚合。一项 map-reduce 作业意味着从磁盘读取和写入磁盘的字节数更少,并且花费在设置和拆除 Hadoop 作业上的时间更少。除非您正在执行一个计算量非常大的过程(并且绝对不会计算平均值),否则这些因素,尤其是磁盘 I/O,是一项工作需要多长时间的最重要考虑因素。

【讨论】:

在 Pig 中也称为多查询。一次阅读多次使用。

以上是关于apache pig中的嵌套组的主要内容,如果未能解决你的问题,请参考以下文章

apache Pig 试图在每个组中获得最大计数

将键值元组包转换为 Apache Pig 中的映射

apache pig Java UDF - 更改属性中的值似乎并没有坚持

元组中的元素到 Bag Pig 中的元组

PIG 对元组中的对应元素求和

用于连接元组中的值的 Pig 脚本