Если кому интересно более полностью углубиться в концепцию MapReduce, все её возможности, матбазу, которая стоит под MapReduce, и таким образом полностью осознать, какое разнообразие операций вы можете с этой технологией сотворить — есть замечательная статья Павла Самолысова. Рекомендую.
Вот блин оладушек. А у меня, по-вашему, пять научных степеней, премия Филдса, личная кафедра в MIT и жилет Вассермана.
Вы вот очень и очень неглупый человек, по топикам же видно с первого взгляда. А записи в статье ясны и доступны, если в них вдумываться, читая, а не воспринимать, как еще одну копилку из 10 примеров по HTML5.
Чуть оффтопну. Вот пришел к нам в универ первый курс только что. Сразу после ЗНО (украинский аналог ЕГЭ). Попали ребята на первую в жизни пару дискретной математики. Им начинают рассказывать про операции матлогики — конъюнкцию (&&, and) и дизъюнкцию (||, or). Ребята услышали два заумных слова, увидели на доске «страффные» значки и все, повыпадали в осадок, понять что-то даже не пытаются, с первой же пары признают, что попали в филиал ада на Земле. А мозги включить хоть на секундочку — хрен вам!
А я весь первый курс и решал дискретку 20 человекам на нашем потоке («прикладная математика» в одном из Топ-10 ВУЗов столицы). Ее так никто и не понял :)
Но статья та все равно в некий ужас приводит. Может конечно соберусь и прочитаю ее, но такие статьи все же пишут академики для академиков. (До сих пор с ужасом вспоминаю как изучал самостоятельно компьютерное зрение — все эти «Возьмем переменную א» («алеф») снились… что еще хуже — даже толком не знаешь как ее искать-то эту букву, а ведь могли бы назвать «x»).
Гм. У меня вот один из Топ-3 вузов, но другой столицы — Киева, специальность «системный анализ» — реально направление то же, что у вас, математика+IT. И ничего, дискретку 80% потока нормально шарили, а 30% потока было даже интересно :)
А вообще я понял проблему. Пора исполнять свою давнишнюю мечту и писать для хабрааудитории цикл статей по theoretical computer science. Потому что как-то это неправильно, когда к любой статье с математическими символами программист относится как к недоступному кошмару, но между тем продолжает интересоваться любыми новинками своей области (ну я имею в виду серьезные вещи, тот же MapReduce, а не всякие там box-shadow). Однако применить эти новинки в полном объеме не может в силу невладения материалом.
Кстати, букву «алеф», насколько мне известно, впервые использовал в математике Кантор годах эдак в 1874-1884. Ему надо обозначать очень специфичные объекты — кардинальные числа (разные виды бесконечностей), и сэр очень не хотел боянить :) Поэтому выбрал изощренный алфавит — иврит. Буква так проперла некоторых математиков, что стала использоваться во всяких экстравагантных случаях :)
Если верить mraleph, от которого я впервые это услышал, то ходят слухи, что Чебышев использовал в своих работах букву «Ы».
Так что наезжать на обозначения в математике уже давно бессмысленно — что море вычерпывать =)
А вообще лучше конечно practical computer science. Такого вот уровня объяснения нужны: www.youtube.com/watch?v=0PahtaFK640 Кстати, пошел смотреть это именно после статьи про формат JPEG, где упоминались коды Хафмана, которые я так и не понимал что такое. Посмотрел — все понял.
Спасибо тебе добрый человек за статью. Наверное я ничего не понимаю в этой жизни, но мне не по себе когда пирамидальную сортировку называют MergeSort(что на самом деле совсем другая вещь: en.wikipedia.org/wiki/Merge_sort). И иметь на практики данные вида [bar, [1,1]] — может стать крайне накладно по памяти, нужно стараться начать этап reduce раньше.
По теории MapReduce — рекомендую отчет о реинженеринге методики MapReduce (на Haskell) — Ralf Lammel Googles MapReduce Programming Model — Revisited (pdf придется поискать)
Вспомнилось как сам пытался понять что есть кластеризация, и как она работает еще не читав никаких книг и материалов, зная о ней что это — «что-то параллельное». Замечательная статья, спасибо.
Если никто не видит :) По идее пока что, насколько я знаю, за MapReduce никого не засудили. Но все же я бы остерегся упоминать в рекламе какой-нибудь коммерческой организации, что «мы существуем только благодаря MapReduce!» А так внутренне — думаю, что без проблем можно.
Во-первых, наверняка у Вас 2 ядра, а может и 4 — вот вам уже и кластер 4 машин :)
Во-вторых, лично я использую это для того, что 1) сложно посчитать не выйдя за пределы памяти, 2) что вообще другими методами считать сложно. Например, синонимы из второго топика.
Они его в 2004 опубликовали еще. Многие фирмы держат защитные патенты — типа «не судись со мной, а то я их достану и тебя засужу». А так вопрос отмены software patents — уже который год ОЧЕНЬ ГОРЯЧИЙ.
Скажем так, если бы они его не запатентовали, то запатентовали другие бы.
И с очень большой вероятностью эти другие бы захотели бы покушать чуть чуть тортика Google :)
Да, это войны, в которых нет хороших или плохих, и будут пока не отменят патентное право на IT хотя бы (а слухи разные ходят, говорят что в U.S. может все-таки дойти до этого).
Пифагор, кстати, расространял знания только среди закрытой группы последователей, и общественным достоянием они стали спустя примерно век после его смерти.
Ну как бы индексы в RDMS под частую на них и делаются :)
Не забывайте, что основные задачи MapReduce — обойти ограничение по памяти и максимально запаралелить.
А с деревьями проблема, что надо дерево иметь в распоряжении во время индексирования (добавления/поиска). И если очень большое дерево или надо чтоб обработка шла одновременно на распределенной системе, деревья не оправдывают возложенных на них задач.
Тогда Вы можете использовать Hadoop Streaming. Там по сути отдельно компилируется map, отдельно reduce, вход у обоих — stdin, выход — stdout. Компилировать на каком угодно языке можно. А Hadoop — он не только по процессам разделен — а может даже и по машинам.
Не, просто это слово, которое всегда в словарях английского первым попадалось :) Честно говоря что такое aardvark в компьютером смысле я даже и не знаю.
А Википедию я в других целях парсил — об этом тоже писал на Хабре в паре топиков "Толпы против Веб — 2:0"
Хмм, Вы правы, там должно быть миллионы. Точнее говоря, сотни миллионов — я не исключал цифры и слова с цифрами, так что у меня получались сотни миллионов уникальных. Исправлю. Спасибо.
ну я просто прикидывал так что в одном языке даже со всеми реально используемыми словоформами эта цифра может быть оценена сверху как «все слова» * 10.
в 8ой строчке класса MapReduce у вас следующее:
if cur_key == prev_key or prev_key is None:
и prev_key перед циклом приравнян к None, дык как цикл сможет пойти по else если в любом случае (даже если cur_key неравно prev_key) его значение будет True?
MapReduce или подсчеты за пределами возможностей памяти и процессора (попробую без зауми)