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()
}
本文来自博客园,作者:jsqup,转载请注明原文链接:https://www.cnblogs.com/jsqup/p/16125346.html

浙公网安备 33010602011771号