尝试通过map_reduce了解如何执行此操作。目前,我发现将整个集合拉成一个大熊猫数据帧。那个df包含这样的东西:
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
我真正需要做的是找到镜头每层的MAX总帧数。结果数据帧应仅包含每个图层中的一个用于镜头。例如:
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 :(得分:1)
这里不需要MapReduce,很可能只使用聚合框架:
{ "$group" : { "_id" : { "l": "$layers",
"s": "$shots"
},
"maxframes" : {"$max" : "$totalframes"}
} }
不确定您是否关心其他字段,如果是,您可以将它们添加到“_id”分组。如果重要,您可以使用$project
重命名另一个阶段的字段。
答案 1 :(得分:0)
当你看一下你的数据表明它在SQL中是一个简单的“分组依据”时,map reduce可能是不必要的
我正在考虑一个聚合查询,大概是这样的:
{$group : {"_id" : "$layers", "max_totalframes" : {"$max" : "$totalframes"}}}
这应返回每个图层项目的最高总框架数。如果我正确地理解了您的问题,那就是您正在寻找的