Spark的Example---SparkPi

来源:互联网 发布:在线雅思水平测试软件 编辑:程序博客网 时间:2024/05/20 23:57

SparkPi.scal的源代码分析:

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

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

import scala.math.randomimport 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:





0 0
原创粉丝点击