您好,登錄后才能下訂單哦!
這篇文章主要介紹怎么用hadoop計算PI值,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
百度一下,計算PI的方法還真不少。但在hadoop examples代碼中的注釋寫的是:是采用 Quasi-Monte Carlo 算法來估算PI的值。
維基百科中對Quasi-Monte Carlo的描述比較理論,好多難懂的公式。
好在google了一把,找到了斯坦福大學網站上的一篇文章:《通過扔飛鏢也能得出PI的值?》,文章很短,圖文并茂,而且很好理解。
我這里將那篇文章的重要部分截了個圖:
對上面的圖再稍微解釋一下:
1、Figure2是Figure1的右上角的部分。
2、向Figure2中投擲飛鏢若干次(一個很大的數目),并且每次都仍在不同的點上。
3、如果投擲的次數非常多,Figure2將被刺得“千瘡百孔”。
4、這時,“投擲在圓里的次數”除以“總投擲次數”,再乘以4,就是PI的值!(具體的推導過程參見原文)
在這個算法中,很重要的一點是:如何做到“隨機地向Figure2投擲”,就是說如何做到Figure2上的每個點被投中的概率相等。
hadoop examples代碼中,使用了Halton sequence保證這一點,關于Halton sequence,大家可以參考維基百科。
我這里再總結一下Halton sequence的作用: 在1乘1的正方形中,產生不重復,并且均勻的點。每個點的橫坐標和縱坐標的值都在0和1之間。
正是這樣,保證了能夠做到“隨機地向Figure2投擲”。
有人總結了一下,這個實際上叫做蒙特卡洛算法,我們取一個單位的正方形(1×1) 里面做一個內切圓(單位圓),則 單位正方形面積 : 內切單位圓面積 = 單位正方形內的飛鏢數 : 內切單位圓內的飛鏢數 ,通過計算飛鏢個數就可以把單位圓面積算出來, 通過面積,在把圓周率計算出來。
注意 ,精度和你投擲的飛鏢次數成正比。
[java] view plaincopyprint?
<span style="white-space:pre"> </span>hadoop jar $HADOOP_HOME/hadoop-*-examples.jar pi 100 100000000
后面2個數字參數的含義:
第1個100指的是要運行100次map任務
第2個數字指的是每個map任務,要投擲多少次
2個參數的乘積就是總的投擲次數。
我運行的結果:
以上是“怎么用hadoop計算PI值”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。