apache pig中的嵌套组

时间:2013-06-07 05:45:48

标签: mapreduce apache-pig

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

例如,如果我的数据是(交换,符号,日期,股息)形式,其中股息是一个度量,其余是维度,我想首先通过交换分组数据并打印总股息然后进一步通过交换和符号等等。

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

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

1 个答案:

答案 0 :(得分:1)

这完全取决于您对“最佳”的定义。你的直觉,如果你先通过(交换,符号,红利)进行细粒度分组,然后将结果分组到(交换,符号),那么得到(交换)的结果在某种意义上是正确的你将减少算术运算。但是,map-reduce流量明显不是最佳的。这将需要3个map-reduce作业,每个输出都会输入下一个输入。

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