2013-12-13 40 views
0

试图了解如何使用map_reduce执行此操作。目前,我做了一个发现,将整个集合整合到一个大熊猫数据框中。该DF包含这样的事情:mapreduce查找多个最大值

project  ep  seq  shot  layers   totalframes 
showA  sh18  17120  10  cnt_chr_set  128 
showA  sh18  17040  70  shd_chr_set  288 
showA  sh18  80 460  chr_rim   131 
showA  sh18  17120  20  chr_vol_lgt  120 
showA  sh18  17120  10  set_all   128 
showA  sh18  17120  20  cnt_chr_set  120 
showA  sh18  17120  20  cnt_chr_set  130 
showA  sh18  17120  20  cnt_chr_set  3 
showA  sh18  17120  20  cnt_chr_set  1 
showA  sh18  17120  10  set_all_ani  128 
showA  sh18  17120  20  set_all_ani  120 
showA  sh18  17040  70  set_all   288 
showA  sh18  17120  10  shd_chr_set  128 
showA  sh18  17120  20  shd_chr_set  120 
showA  sh18  18150  20  chr_ben_steam  3 
showA  sh18  18150  20  chr_whi_steam  3 
showA  sh18  18150  20  chr_bil_steam  3 
showA  sh18  17040  70  chr_sal_steam 288 

我真的需要做的是找到一个镜头的每层最大totalframes。生成的数据帧应该只包含一个镜头的每个图层中的一个。例如:

showA  sh18  17120  20  chr_vol_lgt  120 
showA  sh18  17120  20  cnt_chr_set  130 
showA  sh18  17120  20  set_all_ani  120 

我一直在试图用熊猫来达到这一点,但它似乎是太多的数据来处理。只需将我需要的信息从MongoDB拉入数据框看起来就像是正确的路线,但我不知道从map_reduce开始。

指针赞赏。

回答

0

当一个人看你的数据表明,这将是一个简单的“GROUP BY”在SQL,映射减少很可能将不必要的

我想聚集查询,事情大致是这样的:

{$group : {"_id" : "$layers", "max_totalframes" : {"$max" : "$totalframes"}}} 

这应该返回每个图层项目的最高总帧数。如果我理解正确的问题,那就是你要找的

+0

难道这组图层,但忽略镜头?我有一个有限的图层名称,但有数千个不同的镜头名称。需要为每个镜头找到每个图层的最大值。 –

+0

你是对的。我想你会想用一个$ sort by layers的组合来进行聚合:1,totalframes:-1和$ first。如果明天有空,我可以把它们放在一起 – Mzzl

1

的MapReduce是什么不必要在这里,最有可能的,只要使用聚合框架:

{ "$group" : { "_id" : { "l": "$layers", 
         "s": "$shots" 
         }, 
       "maxframes" : {"$max" : "$totalframes"} 
} } 

不知道你所关心的其他领域,如所以你可以将它们添加到“_id”分组中。如果有问题,您可以使用$project重新命名另一个阶段的字段。