首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >大数据Spark(五十八):Spark Pi介绍

大数据Spark(五十八):Spark Pi介绍

作者头像
Lansonli
发布2025-05-24 09:56:44
发布2025-05-24 09:56:44
21100
代码可运行
举报
文章被收录于专栏:Lansonli技术博客Lansonli技术博客
运行总次数:0
代码可运行

Spark Pi介绍

Spark Pi是Apache Spark官方提供的一个示例程序,该案例使用 Spark 进行分布式计算,通过蒙特卡罗方法估算圆周率(π)的值,其估算π原理如下:

上图中,正方形边长为2,圆的半径为1,那么正方形面积为4,圆的面积为π。现在向正方形内随机“打点”,即随机生成(x,y)坐标,范围不超过正方向范围,最终记录在圆内打点的个数与正方形内打点的个数,两者比例为4/π,当“打点”个数非常大时,可以大约算出π的大小。

Spark Pi源码如下(Spark源码examples模块中org.apache.spark.examples.SparkPi):

代码语言:javascript
代码运行次数:0
运行
复制
object SparkPi {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder
      .appName("Spark Pi")
      .getOrCreate()
    val slices = if (args.length > 0) args(0).toInt else 2
    //如果slices为100,那么n为一千万
    val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow
    //随机生成n-1个点,然后计算落在圆内的点的个数
    val count = spark.sparkContext.parallelize(1 until n, slices).map { i =>
      //random返回的是0到1之间的随机数,x,y的取值范围是-1到1
      val x = random * 2 - 1
      val y = random * 2 - 1
      if (x*x + y*y <= 1) 1 else 0
    }.reduce(_ + _)
    //计算pi-圆的面积/正方形的面积=count/n,即:pi = 4*count/(n-1)
    println(s"Pi is roughly ${4.0 * count / (n - 1)}")
    spark.stop()
  }
}

以上代码注意如下几点:

  • SparkSession为SparkSQL中的对象,可以通过SparkSession对象获取SparkContext对象。
  • slices参数是用户在运行SparkPi 任务传入的参数,该参数用于在并行化集合为RDD过程中指定RDD的分区个数,即并行度个数。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spark Pi介绍
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档