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")
}
}