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中的嵌套组的主要内容,如果未能解决你的问题,请参考以下文章