spark自帶的python例子的分析

這裏分析一下spark自帶的求PI的例子,作爲入門的代碼
首先要介紹一下這個求PI的原理
其實也算是使用的蒙特卡洛模擬算法, 基本的方法就是考慮一下邊長爲1的正方形
其中以正方形的一個點爲中心,以1爲半徑畫圓的話,能夠有1/4個圓畫到
正方形中, 根據這個原理來隨機的生成(1, 1)之間的點
若是知足x2 + y2 <= 1的話,那麼就是在扇形區域內
不然在扇形區域外
用這種方法隨機生成不少點的話,用扇形區域內的點數比上總數
能夠近似理解爲扇形的面積
S:扇形區域內點數
N:總點數
1/4rr*PI = S/N
可的PI=4S/N
代碼實現就以下面所示java

import sys
from random import random
from operator import add
from pyspark import SparkContext

if __name__ == "__main__":
    """
        Usage: pi [partitions]
    """
    //初始化sc
    sc = SparkContext(appName="PythonPi")
    //設置並行度
    partitions = int(sys.argv[1]) if len(sys.argv) > 1 else 2
    n = 100000 * partitions
    
    //定義閉包函數
    def f(_):
        x = random() * 2 - 1
        y = random() * 2 - 1
        return 1 if x ** 2 + y ** 2 < 1 else 0
    //這裏的map函數相似於hadoop的map過程,reduce也是相似於reduce過程,最後獲得的是數量的加和
    //這裏的reduce也能夠按照key來
    count = sc.parallelize(range(1, n + 1), partitions).map(f).reduce(add)
    print("Pi is roughly %f" % (4.0 * count / n))

    sc.stop()

由上面的程序可見,使用spark編寫mr程序是很方便的
不用像hadoop那樣寫那麼長的java程序來作,並且支持多種語言算法

相關文章
相關標籤/搜索