2013-12-13 3 views
0

Попытка понять, как это сделать с помощью map_reduce. В настоящее время я нахожу, чтобы вытащить целую коллекцию в один большой фрейм панды. Это ДФ содержит что-то вроде этого: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 

То, что я на самом деле нужно сделать, это найти MAX 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 в dataframe, кажется правильным путем, но я не знаю, с чего начать с map_reduce.

Указатели оценили.

ответ

0

Когда один взгляд на ваших данных предполагает, что это будет простой «группу,» в SQL, карта уменьшить, вероятно, будет ненужной

Я думаю запрос агрегации, что-то примерно так:

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

Это должно возвращать самые высокие тоталграммы для каждого элемента слоя. Если я правильно понял ваш вопрос, это то, что вы ищете

+0

Не будет ли эта группа слоев, но игнорировать снимки? У меня есть ограниченное число имен слоев, но тысячи разных имен выстрелов. Вам нужно найти максимальный размер для каждого слоя для каждого кадра. –

+0

Вы правы. Я думаю, вы захотите сделать агрегацию с комбинацией $ sort по слоям: 1, totalframes: -1 и $ first. Я могу собрать его вместе, если у меня будет время завтра – Mzzl

1

MapReduce ненужно здесь, скорее всего, просто использовать структуру агрегации:

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

Не уверен, что если вы заботитесь о других областях, если поэтому вы можете добавить их в группу «_id». Вы можете использовать $project, чтобы переименовать поля на другом этапе, если это имеет значение.

Смежные вопросы