1

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

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

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

这里讨论了类似的东西,但它没有回答我的问题:我可以使用 Pig Latin 中的嵌套 FOREACH 语句生成嵌套包吗? 谢谢!

4

1 回答 1

1

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

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

于 2013-06-08T13:35:26.247 回答