У меня есть коллекция документов в mongodb, и я хочу вычислить CDF для некоторых атрибутов и вернуть или сохранить их в db. Очевидно, что добавление нового атрибута в каждый документ не является хорошим подходом, и я в порядке с приближением, которое я могу использовать позже. Это скорее теоретический вопрос.Накопительное распределение в MongoDB с использованием MapReduce
Так что я пошел с вычислением выборки ВПР на дискретные интервалы с заданием MapReduce, как это (только алгоритм):
- Получить
count
,min
иmax
атрибутаsomeAttr
- Пусть
min = 5
,max=70
,count = 200
. - В
map()
:for (i=this.someAttr; i < max+1; i++) { emit(i, 1) }
- В
reduce()
просто вернуть сумму для каждого ключа. - В
finalize()
разделите уменьшенный выход на количество записей:return val/count
.
Это не выводит коллекцию с образцами из CDF, однако ..
Как вы видите интервал шаг здесь 1
, но огромная неэффективность такого подхода является то, что может быть чудовищным количеством излучая даже из одного документа, даже с небольшим количеством документов в colletion, следовательно, это, очевидно, не является масштабируемым и не будет работать.
Результат выглядит следующим образом:
{ _id: 5, val: 0}
{ _id: 6, val: 0.04}
{ _id: 7, val: 0.04}
...
{ _id: 71, val: 1.0}
Отсюда можно легко получить приближенное значение КОР для любого из значений или даже интерполировать между ними, если это разумно.
Может ли кто-нибудь дать мне представление о том, как вы могли бы вычислить (образец) CDF с помощью MapReduce (или, возможно, без MapReduce)?
Спасибо, очевидное не перешло мне в голову :) Я забыл упомянуть, что мне нужен весь массив образцов заранее, чтобы его можно было использовать внутри mapreduce, поэтому мне в основном не нужен CDF по требованию документы. Разумеется, ваше решение может быть намного лучше, если я построю массив с этим, и это то, что я сейчас буду делать. Мне все еще интересно, может ли это быть сделано с mapreduce, если набор данных слишком велик или ему нужны намного более тонкие интервалы для образца. Я имею в виду, есть точка, в которой подход mapreduce лучше, чем множество подсчетов (при условии, что в MR существует разумный алгоритм). – tamacun