這篇文章主要介紹怎么用hadoop計(jì)算PI值,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出云岡免費(fèi)做網(wǎng)站回饋大家。
百度一下,計(jì)算PI的方法還真不少。但在hadoop examples代碼中的注釋寫(xiě)的是:是采用 Quasi-Monte Carlo 算法來(lái)估算PI的值。
維基百科中對(duì)Quasi-Monte Carlo的描述比較理論,好多難懂的公式。
好在google了一把,找到了斯坦福大學(xué)網(wǎng)站上的一篇文章:《通過(guò)扔飛鏢也能得出PI的值?》,文章很短,圖文并茂,而且很好理解。
我這里將那篇文章的重要部分截了個(gè)圖:
對(duì)上面的圖再稍微解釋一下:
1、Figure2是Figure1的右上角的部分。
2、向Figure2中投擲飛鏢若干次(一個(gè)很大的數(shù)目),并且每次都仍在不同的點(diǎn)上。
3、如果投擲的次數(shù)非常多,F(xiàn)igure2將被刺得“千瘡百孔”。
4、這時(shí),“投擲在圓里的次數(shù)”除以“總投擲次數(shù)”,再乘以4,就是PI的值?。ň唧w的推導(dǎo)過(guò)程參見(jiàn)原文)
在這個(gè)算法中,很重要的一點(diǎn)是:如何做到“隨機(jī)地向Figure2投擲”,就是說(shuō)如何做到Figure2上的每個(gè)點(diǎn)被投中的概率相等。
hadoop examples代碼中,使用了Halton sequence保證這一點(diǎn),關(guān)于Halton sequence,大家可以參考維基百科。
我這里再總結(jié)一下Halton sequence的作用: 在1乘1的正方形中,產(chǎn)生不重復(fù),并且均勻的點(diǎn)。每個(gè)點(diǎn)的橫坐標(biāo)和縱坐標(biāo)的值都在0和1之間。
正是這樣,保證了能夠做到“隨機(jī)地向Figure2投擲”。
有人總結(jié)了一下,這個(gè)實(shí)際上叫做蒙特卡洛算法,我們?nèi)∫粋€(gè)單位的正方形(1×1) 里面做一個(gè)內(nèi)切圓(單位圓),則 單位正方形面積 : 內(nèi)切單位圓面積 = 單位正方形內(nèi)的飛鏢數(shù) : 內(nèi)切單位圓內(nèi)的飛鏢數(shù) ,通過(guò)計(jì)算飛鏢個(gè)數(shù)就可以把單位圓面積算出來(lái), 通過(guò)面積,在把圓周率計(jì)算出來(lái)。
注意 ,精度和你投擲的飛鏢次數(shù)成正比。
[java] view plaincopyprint?
hadoop jar $HADOOP_HOME/hadoop-*-examples.jar pi 100 100000000
后面2個(gè)數(shù)字參數(shù)的含義:
第1個(gè)100指的是要運(yùn)行100次map任務(wù)
第2個(gè)數(shù)字指的是每個(gè)map任務(wù),要投擲多少次
2個(gè)參數(shù)的乘積就是總的投擲次數(shù)。
我運(yùn)行的結(jié)果:
以上是“怎么用hadoop計(jì)算PI值”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!