大数据Spark(五十八):Spark Pi介绍
文章目录
Spark Pi介绍
Spark Pi介绍
Spark Pi是Apache Spark官方提供的一个示例程序,该案例使用 Spark 进行分布式计算,通过蒙特卡罗方法估算圆周率(π)的值,其估算π原理如下:
上图中,正方形边长为2,圆的半径为1,那么正方形面积为4,圆的面积为π。现在向正方形内随机“打点”,即随机生成(x,y)坐标,范围不超过正方向范围,最终记录在圆内打点的个数与正方形内打点的个数,两者比例为4/π,当“打点”个数非常大时,可以大约算出π的大小。
Spark Pi源码如下(Spark源码examples模块中org.apache.spark.examples.SparkPi):
object SparkPi {def main(args: Array[String]): Unit = {val spark = SparkSession.builder.appName("Spark Pi").getOrCreate()val slices = if (args.length > 0) args(0).toInt else 2//如果slices为100,那么n为一千万val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow//随机生成n-1个点,然后计算落在圆内的点的个数val count = spark.sparkContext.parallelize(1 until n, slices).map { i =>//random返回的是0到1之间的随机数,x,y的取值范围是-1到1val x = random * 2 - 1val y = random * 2 - 1if (x*x + y*y <= 1) 1 else 0}.reduce(_ + _)//计算pi-圆的面积/正方形的面积=count/n,即:pi = 4*count/(n-1)println(s"Pi is roughly ${4.0 * count / (n - 1)}")spark.stop()}
}
以上代码注意如下几点:
- SparkSession为SparkSQL中的对象,可以通过SparkSession对象获取SparkContext对象。
- slices参数是用户在运行SparkPi 任务传入的参数,该参数用于在并行化集合为RDD过程中指定RDD的分区个数,即并行度个数。
- 📢博客主页:https://lansonli.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
- 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨