spark pi(org.apache.spark.examples.SparkPi 原理)

spark pi

org.apache.spark.examples.SparkPi 原理

package com.shujia.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

import scala.util.Random

object Demo22PI {
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf()

    conf.setAppName("Demo21ClazzNum")

    //在local后面可以通过[]指定一个参数,指定一个任务运行时使用的CPU核数,不能超过自己电脑的CPU核数
    conf.setMaster("local[4]")

    val sc = new SparkContext(conf)

    /** 
      * 计算圆周率
      */

    //构建一个很大的集合
    //to -- 是一个方法,可以构建一个很大的集合
    val list: Range.Inclusive = 0 to 1000000

    //基于集合构建rdd
    //minPartitions -- 手动设置分区数
    val listRDD: RDD[Int] = sc.makeRDD(list, 8)

    //1、随机生成很多点

    val pointRDD: RDD[(Double, Double)] = listRDD.map(i => {

      //随机生成x, y,范围是 -1 到 1
      val x: Double = Random.nextDouble() * 2 - 1
      val y: Double = Random.nextDouble() * 2 - 1

      (x, y)
    })

    //计算圆内点的数量
    val yuanRDD: RDD[(Double, Double)] = pointRDD.filter {
      case (x: Double, y: Double) =>
        //因为圆的半径设为1,所以开不开方都可以
        x * x + y * y <= 1
    }

    //计算Pi
    val PI: Double = yuanRDD.count().toDouble / pointRDD.count() * 4

    println(s"PI is $PI")
  }
}
posted @ 2022-03-09 00:23  赤兔胭脂小吕布  阅读(220)  评论(0编辑  收藏  举报