Spark中的Pi Estimation

源码

from pyspark.sql import SparkSession
from random import random
from operator import add
# Pi Estimation
def inside(p):
    x, y = random(), random()       # 随机生成x,y坐标,在圆内或圆上则返回True
    return x*x + y*y <= 1

def Pi_estimation(spark):
    sc = spark.sparkContext
    NUM_SAMPLES = 10000             # 
    count = sc.parallelize(xrange(0, NUM_SAMPLES)) \    #parallelize设置并行操作,filter进行过滤,count进行计数
            .filter(inside).count()
    print("Pi is roughly %f " % (4.0 * count / NUM_SAMPLES))

if __name__ == "__main__":
    spark = SparkSession \
        .builder \
        .config("spark.some.config.option", "some-value") \
        .getOrCreate()
    Pi_estimation(spark)

思路

利用蒙特卡罗算法,在一个边长为2的正方形内画个半径为1的圆。正方形的面积 S1=4,圆的面积 S2=πr^2=π现在只需要计算出S2就可以知道π,这里取圆心为坐标轴原点,在正方向中不断的随机选点,总共选n个点,计算在圆内或圆上的点的数目为count,则 S2=S1*count/n,然后就得出π的取值
[蒙特卡罗算法是什么](https://www.zhihu.com/question/20254139)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值