SparkPi源码解读

 

SparkPi源码

import scala.math.random  
  
import org.apache.spark._  
  
/** Computes an approximation to pi */  
object SparkPi {  
  def main(args: Array[String]) {  
    if (args.length == 0) {  
      System.err.println("Usage: SparkPi <master> [<slices>]")  
      System.exit(1)  
    }  
    val spark = new SparkContext(args(0), "SparkPi",  
      System.getenv("SPARK_HOME"), SparkContext.jarOfClass(this.getClass))  
    val slices = if (args.length > 1) args(1).toInt else 2  
    <span style="color:#3366ff;">val n = 100000 * slices  
    val count = spark.parallelize(1 to n, slices).map { i =>  
      val x = random * 2 - 1  
      val y = random * 2 - 1  
      if (x*x + y*y < 1) 1 else 0  
    }.reduce(_ + _)  
    println("Pi is roughly " + 4.0 * count / n)  </span>
    spark.stop()  
  }  
}  


用Spark的计算框架来求解 圆周率Pi

求解算法是根据蒙特卡洛投针求PI

 

 

调用者传个参数进去也就是投针次数,

默认投20万次,然后他要造成在一个边长为2的正方形里等概率投针的模拟。这里random()产生0~1之间的数,“*2”就是0~2之间等概率的数,再“-1”x与y就变成-1到1之间等概率的数,(x,y)就是在边长为2的正方形里均匀分布的点,正方形的内切圆面积就是PI,距原点小于1的就在园内,由“PI/4 = 园内点数/总点数”可以估计PI

 

SparkPi 默认采用两个平行的计算 来计算20万个点投到园内的个数 count

  

    Pi   =     园内点数/总点数     *  正方形面积 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值