2. SparkPi实例

原理

代码

package operator

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import java.lang.Math.random

object SparkPI extends App {
  // 分区数量
  val num_partitions : Int =
    if(args.length > 0)
      args(0).toInt
    else
      2

  // 点的个数
  private val num_points: Int = num_partitions * 100000
  private val sparkConf = new SparkConf().setMaster("local").setAppName("pi")
  private val sparkContext = new SparkContext(sparkConf);

  // 把本地的scala数据集合转换为RDD
  private val rdd: RDD[Int] = sparkContext.parallelize(1 to num_partitions, num_partitions)

  // pi的求取逻辑
  // 随机产生[-1, 1],如下代码统计了所有在圆内的数据
  private val result: Int = rdd.map(element => {
    val x = random * 2 - 1
    val y = random * 2 - 1
    if (x * x + y * y < 1) 1 else 0
  }).reduce(_ + _)

  // 最终的结果
  private val pi: Double = 4.0 * result / num_points
  println(s"PI is roughly $pi")

  sparkContext.stop()
}
posted @ 2022-04-10 12:33  jsqup  阅读(88)  评论(0)    收藏  举报