Spark的Example---SparkPi

SparkPi.scal的源代码分析:

1.代码在examples/src/main/scala/org/apache/spark/examples目录下

2.代码(修改了部分源码)内容如下:

import scala.math.random

import org.apache.spark._

/** Computes an approximation to pi */
object SparkPi {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("Spark Pi").setMaster("local")//本地模式
    println(args(0))
    val spark = new SparkContext(conf)
    //println(args(0).toInt)
    val slices = if (args.length > 0) args.length else 2

    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)
    spark.stop()
  }
}

核心的语句是这条:
val count = spark.parallelize(1 to n, slices).map { i => //map函数将一条记录转换为另一条记录(一对一关系)
      val x = random * 2 - 1
      val y = random * 2 - 1
      if (x*x + y*y < 1) 1 else 0
    }.reduce(_ + _) //reduce将RDD中元素两两传递给输入函数,同时产生一个新的值,新产生的值与RDD中下一个元素再被传递给输入函数直到最后只有一个值为止。reduce(_ + _) 也可以写成
reduce((x,y)=>x+y)


这个算法是概率算法(蒙特卡洛概率算法求圆周率),不是用公式奇数项求和算的。



3.其他example:





你可能感兴趣的:(Spark,spark,scala)