以前也知道蒙特卡洛投针求PI,今天安装spark,安完先要试试他自带的几个小程序看看能不能用,我主要会用python写程序,也就是pyspark所以在spark里的examples目录深处找python的文件夹,里面的pi.py就是。看了一下源码是这样的:
import sys
from random import random
from operator import add
from pyspark import SparkContext
if __name__ == "__main__":
"""
Usage: pi [partitions]
"""
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
count = sc.parallelize(range(1, n + 1), partitions).map(f).reduce(add)
print("Pi is roughly %f" % (4.0 * count / n))
sc.stop()
意思就是调用者传个参数进去也就是投针次数,传3他就投30万次,然后他要造成在一个边长为2的正方形里等