import sys
from random import random
from operator import add
from pyspark.sql import SparkSession
if __name__ == "__main__":
"""
Usage: pi [partitions]
"""
spark = SparkSession\
.builder\
.appName("PythonPi")\
.getOrCreate()
# sys.argv: 获取命令行列表第1个参数
partitions = int(sys.argv[1]) if len(sys.argv) > 1 else 2
n = 100000 * partitions
def f(_: int) -> float:
# random.random() 随机生成一个在[0,1)的数,x,y分别为[-1,1)的随机数
x = random() * 2 - 1
y = random() * 2 - 1
# 如果在圆内就返回1,否则0
return 1 if x ** 2 + y ** 2 <= 1 else 0
# partitions表示分区数量
# 1. 先创造一个分布式数据集,范围是从1到n+1
# 2. map表示将每一个元素映射到f函数,这里指生成100000个随机数,其中点落在圆里面表示1,在外面表示0
# 3. reduce(add)表示将这些1相加
count = spark.sparkContext.parallelize(range(1, n + 1), partitions).map(f).reduce(add)
print("Pi is roughly %f" % (4.0 * count / n))
spark.stop()
【无标题】
最新推荐文章于 2024-08-23 09:20:50 发布