文章目錄
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博客🙉
- 📢停下休息的時候不要忘了別人還在奔跑,希望大家抓緊時間學習,全力奔赴更美好的生活?