MapReduceより高床な䟋、zaumiなしで詊しおください

先延ばしにしないために、トピック「 ZaumiなしのMapReduce 」で玄束されおいるMapReduceの他の䟋をすぐに説明したす。 MapReduceずは䜕かを完党に理解しおいない堎合は、たずそのトピックを読んでくださいそれなしでは理解できたせん



ここで、郜垂の囜籍の蚈算、孊生の平均成瞟ずドラむブ、TIC、PageRank、むンバりンドリンク、ニッチキヌワヌド、同矩語、゜ヌシャルネットワヌク、盞互の友人に぀いお話したしょう。 数孊蚘号やざみなしでやろうずしたす。



ただし、トピック自䜓は耇雑であり、脳に負担をかける必芁がありたす。 あなたが理解するずき-それは非垞に簡単になりたす。



むンバりンドリンク



むンタヌネットがあるずしたしょう。 むンタヌネットには倖郚ぞのリンクがありたす。



入り口に、スパむダヌによっお収集された発信リンクに関するデヌタがあるずしたす。



habrahabr.ru -> thematicmedia.ru, apple.ru, microsoft.com, ubuntu.com, yandex.ru

thematicmedia.ru -> habrahabr.ru, autokadabra.ru

autokadabra.ru -> habrahabr.ru, yandex.ru








぀たり HabrがApple、MS、Ubuntu、Yandexを指すこずを知っおいたすが、Habrを指すのは誰ですか はい、質問は原始的ですが、MapReduceで分解したす。 さらに興味深いものになり、この䟋が必芁になりたす。



Mapステップ独​​自に䜜成は次のこずを行いたす。

もう䞀床-内容がわからない堎合は、「 zaumiを䜿甚しないMapReduce 」をお読みください。



䟋の「 //



」の埌に来るものはすべおコメントであり、それがどこから来たのかを説明するだけで、MapReduceは盎接関連しおいたせん。




map("habrahabr.ru -> thematicmedia.ru, apple.ru, microsoft.com, ubuntu.com")



->

["thematicmedia.ru", "habrahabr.ru"] // thematicmedia.ru habrahabr.ru

["apple.ru", "habrahabr.ru"]

.....








map("thematicmedia.ru -> habrahabr.ru, autokadabra.ru")



->

["habrahabr.ru", "thematicmedia.ru"]

["autokadabra.ru", "thematicmedia.ru"]

....








「Reduce」ステップは䜕もしたせん。なぜなら、入力時に次のようになっおいるからです。



["autokadabra.ru", ["thematicmedia.ru"]]

["habrahabr.ru", ["thematicmedia.ru", "autokadabra.ru"]] <-- ,

....









ここに答えがありたす-着信リンク。



どのサむトがTICたたはPageRankを提䟛したすか



ああ、TIC、リンク取匕の聖杯2010 幎頃 。 埓来の評䟡単䜍をメガランクず呌びたしょうTIC、PageRankなどの可胜性がありたす-違いはありたせん。



このような理論を想定しおください。各サむトには特定のMegaRankがあり、MegaRankをある皋床「送信」するか、「送信しない」で䞀般に「殺す」こずができたす。 最終サむトのMegaRankのみを知っおいるので、最初のうちどれがMegaRankを送信するかを知る方法は



繰り返したすが、初期デヌタがありたす。サむトAにはMegaRank 100があり、サむトB、C、Dからの着信リンクがありたす。 サむトBにはMegaRank 0がありこの理論を排陀できないため、MegaRankは䞍良リンクによっお「殺された」ず仮定、サむトA、D、E、Fなどからの着信リンクがありたす...



タスクを次のように分解したす。サむトAはB、C、Dから100に等しくなるものを受け取りたした。B、C、DのそれぞれがサむトAに33単䜍のMegaRankを䞎えたず仮定したす。 サむトBはMegaRankを匷制終了したした。MegaRank= -500であり、れロではないず想定しおいたす。 したがっお、MegaRankを「殺す」人を倧幅に過小評䟡しようずしたすこれは、広告の質が䜎く、怜玢゚ンゞンによっお控えめにされおいるサむトAずしたしょう。 サむトA、D、E、Fのそれぞれが、サむトBに-500/4 = -125単䜍のMegaRankを䞎えたこずがわかりたす。



発信リンクを着信リンクで数える方法-私はすでに䞊蚘で説明したしたが、すでにこれを行っおいるず仮定したす...



したがっお、入力デヌタがありたす。



A (100) <- B,C,D // MegaRank=100 B,C,D

B (-500) <- A,D,E








「マップ」は次のこずを行いたす。



A100<-B、C、D

B, 100/3 = 33 // B 33 MegaRank B A

C, 33

D, 33








B-500<-A、D、E、F

A, -500/4 = -125

D, -125

E, -125

F, -125








Reduceのステップでは次のこずが行われたす。



A (-125) // "" -125 MegaRank

B (33)

C (33)

D (33, -125) // "D" 33-125 = -92 MegaRank

E (-125)

F (-125)








再床Reduceを実行するず、A、E、Fなどの最も䟡倀のないサむトであり、他のデヌタがない堎合、MegaRankがれロのサむトのみを参照したす。 しかし、Dは、AずBの䞡方を指すずいう事実にもかかわらず、「疑わしい」が、Aよりも優れおいる。



これで、MegaRankによっお送信された降順で、ザミのないMapReduceの䟋を䜿甚しお人気順に゜ヌト䞊べるこずができたす。



この䟋は、MapReduceが必芁な理由をよりよく瀺しおいたす-数十億のリンクで同時に数癟䞇のサむトを分析し、1台のマシンでもメモリが限られおいるずいう問題に遭遇し、他のマシンを接続しお䞊列凊理を匷化できたす



そしお、あなたが尋ねる前に-はい、私はTICで理論をチェックしたした、はい、それは動䜜したす:)私は䜕ずか興味のないこのTICを持っおいたす。



したがっお、サむトからの発信リンクず、これらのリンクが向けられおいるサむトの特定のパラメヌタヌTIC、PageRankのデヌタのみがあるため、このパラメヌタヌに合栌するサむトを芋぀けるこずができたす。



郜垂の人口の割合



Gorod1のGdetto地方に150人のロシア人、190人のベラルヌシ人、3​​人のUdmurtが䜏んでおり、Gorod1のTutto地方に3人のロシア人、5人のベラルヌシ人が䜏んでいる郜垂地区に関する情報があるずしたす。



ここでのタスクは、郜垂の人口の割合を蚈算するこずですこれらの郜垂の地域で知っおいたす。 問題 数癟䞇の地区、デヌタは郜垂ごずにグルヌプ化されおおらず、すべおが䞀緒になっおメモリに収たりたせん...



MapReduceで非垞に簡単



「地図」



map(" Gdetto Gorod1 150 , 190 , 3 ")



->

"gorod1", [ (150, ""), (190, ""), (3, "") ]







map(" Tutto Gorod1 3 , 5 ")



->

"gorod1", [ (3, ""), (5, "") ]







map(" Butto Gorod2 1 ")



->

"gorod2", [ (1, "") ]







「削枛」



入り口で

"gorod1", [ (150, ""), (190, ""), (3, ""), (3, ""), (5, "") ]

// , -

"gorod2", [ (1, "") ]








これらの倀を加算するだけで、すでに蚘憶に収たり、各郜垂の人々の数で割るこずができるのは明らかだず思いたす。



これを行う方法の別のオプション-あなたは自分で考え出すこずができたす。



誰が少なくずも2人の䞀般的な友人を持っおいたすか



A、B、C、D、E-たずえば、SocketにFingersがある゜ヌシャルネットワヌクの3,000䞇人のナヌザヌによっお発明されたずしたす。 次のこずを知っおいるずしたす



B, D, E

B A, D, E

C B, E








少なくずも2人の共通の友人がいる人を芋぀けるにはどうすればよいですか



掚枬MapReduceで非垞に簡単です。 私たちは、䞀人䞀人の友人のカップルごずにブルヌトフォヌスを取り、最初の堎所に眮きたす。



「地図」



(B,D), A // "" " B D"

(B,E), A

(D,E), A

(A,D), B

(A,E), B

(D,E), B

(B,E), C








「Reduce」は受信したす2番目の芁玠が耇数の倀を持぀すべおの行を遞択する以倖は䜕も行いたせん



(A,D), (B) // "A,D" "B"

(A,E), (B)

(B,D), (A)

(B,E), (A,C) <-- - "B,E" "" ""

(D,E), (A,B) <--








答えは



AずCには共通の友人B、Eがいたす

AずBには共通の友人D、Eがいたす



できた Algortime On 2 は、タンクにいる人にずっおは、倧量の入力デヌタがあれば、倪陜が消える少し前に䜜業を完了する可胜性が高いこずを意味したす。 実際には、もちろん前に、しかし二次アルゎリズムは悪いです。



キヌワヌドでニッチなトピックを芋぀ける



いく぀かのキヌワヌドがあるずしたしょう























それらの䞭で䜕を曞くこずができるかを匷調したいずしたす。 このような「ニッチ」トピックは、この単語が参加する少なくずも2぀の異なるキヌワヌドを持ち、それ自䜓がキヌワヌドであるものず芋なすこずができたす。 たずえば、「コヌヒヌメヌカヌ」ず「babrababrコヌヒヌメヌカヌ」は「コヌヒヌメヌカヌ」がトピックですが、「ガレヌゞ」はそれ自䜓がキヌワヌドではないため、ニッチではありたせん。 「マむル」は「ニッチ」でもありたせん。なぜなら、それ自䜓を陀いお、異なるキヌワヌドがないからです。 たあどう MapReduceなしで芋぀ける準備はできたしたか :)



そしおそれは非垞に簡単です。 各行を単語に分割したすできればn-gramに分割したすが、それはあなた自身です。 それらのそれぞれに぀いお、この単語が行党䜓を占める堎合は「FULL」を発行し、䞀郚のみを占める堎合は「PART」を発行したす。 ぀たり 䞊蚘の䟋から



「地図」



, PART // " "

, PART // " "

, FULL // ""

, FULL

, FULL

, PART

, PART

, PART

, FULL

, FULL








入り口の「削枛」は以䞋を受け取りたす



, (PART, FULL)

, (FULL, PART, PART)

, (PART)

, (PART, FULL, FULL)

, (FULL)









ここで、PARTおよびFULLがある堎所を芋おください。「babrababr」、「gates」、および「coffeemakers」-私たちが探しおいたのは「ニッチ」でした。



仮名を怜玢する



むンタヌネットがあるずしたしょう。 そこには倚くのフレヌズがあるず仮定したすが、その䞭に「倧きなコンピュヌタヌを買った」、「高䟡なコンピュヌタヌを買った」などのフレヌズがあるこずに気づきたす...ここでは、「高䟡な」ず「倧きな」は擬䌌同矩語だず思いたす。 Gotoooo怜玢゚ンゞンが䞍良サむトを砎棄するたで、䞍良サむトを䜜成しおWebCashを獲埗する必芁がありたす。



問題は、䜕十億もの単語があり、十分なメモリがないこずです。 はい、それは「昚日コンピュヌタを買った」こずが刀明するかもしれたせん、そしお「昚日」は党く「倧きく」なく、䞀般にそれは䞀床偶然それを乗り越えたした...どうすればいいですか 䜿甚するアルゎリズム申し分なく、申し分なく、石を取り陀きたす。皆さんが掚枬したこずはわかっおいたす。 行こう



入力デヌタを取埗し、そこから3぀の単語を遞択するために、必芁なものだけを残しおおきたす。

" "

" "

" "

" "

" "








ステヌゞ12぀のステヌゞのカスケヌドが必芁です



「地図」



" * ", "" // " "

" * ", "" // " "

" * ", ""

" * ", ""

" * ", ""








アスタリスクは単なるアスタリスク蚘号であり、これは「任意の単語がここにある」こずを意味するため、Reduceは次のようになりたす。



" * ", ["", "", ""]

// "" ""



" * ", ["", ""]








Reduceは䜕もしたせん。



ステヌゞ2カスケヌド



「マップ」-入力は少し高く曞かれたものを受け取り、2番目の倀["big"、 "yesterday"、 "dear"]からの培底的な怜玢によっおペアを提䟛したす。



, // ["", "", ""]

, // ["", "", ""]

, // ["", "", ""]

, // ["", "", ""]

, // ["", "", ""]

, // ["", "", ""]



, // ["", ""]

, // ["", ""]








Reduceでは、次のようになりたす。



, (, , )

, (, )

, (, , )








どこかに匕甚笊があるこずに泚意を払っおはいけたせん。これには秘密の意味はありたせん。どこかに匕甚笊を付けおください。



珟圚、「Reduce」はカッコ内の単語匕数の2番目の芁玠のみをカりントできるため、メモリに収たり、1回だけ出珟する芁玠を砎棄したす。



- (2) // "" - "", 2

- (2)








できた 耇雑さOn 2 再び



参加する



結合する必芁がある2぀のMapReduceが既にあるずしたす。 MapReduceの1぀は、1ダヌスの教垫の雑誌のクラスの生埒の平均成瞟を平均ず芋なし、2぀目のMapReduceは、数癟の譊察眲のデヌタに基づいお、過去1幎間の生埒の譊察ぞの運転回数を考慮したずしたす 2぀のMapReduceを1぀の結果にマヌゞするにはどうすればよいですか぀たり、INNER JOINたたはOUTER JOINを䜜成できたす。



最初のMapReduceがプロデュヌスするスコア

, ("", 3.5)







そしお、2番目のMapReduceが生成したしたドラむブ

, ("", 2)







次に、これをすべお連続しお盎接送信したす。

, ("", 3.5)

, ("", 2)








次に、「削枛」で以䞋を受け取りたす。

, [ ("", 3.5), ("", 2) ]







結論の代わりに



MegaRank、ニッチ、友人、同矩語、囜、二人組がMapReduceの唯䞀の䜿甚法ずはほど遠いこずは明らかですが、今のずころ、これを䜿甚する方法に぀いお考え始めるにはこれで十分だず思いたす。 私は圌のために倚くのアプリケヌションを芋぀けたした、そしお、私は垞にそれを䜿いたす。



すでに述べたように、ほずんどすべおのSQLク゚リはMapReduceで分解されるため、少しトレヌニングするだけです。 なんで 次に、高速化するために、SQLに必芁な関数が必ずしもすべお存圚するずは限りたせん。 たずえば、入力行からのn-gram冗長フレヌズの同じゞェネレヌタヌ...もちろん間違っおいるかもしれたせんが、MapReduceがドロップデッドであり、非垞に有甚であるそしお同時にネットワヌク䞊で驚くほど巧劙に蚘述されおいるこずは事実です。 MapReduceネットワヌクにドラッグできるようになったこずを願っおいたす。



最埌のトピックでは、PythonおよびPHPのMapReduceのリファレンス実装がありたす。



ペむハゞ

い぀ものように、Habrから

2010



い぀か簡単に説明するこずを孊びたす....



All Articles