Spark设计实现π的计算

简介: Spark设计实现π的计算

1 分布式估算圆周率

  1. 计算原理

假设正方形的面积S等于x²,而正方形的内切圆的面积C等于Pi×(x/2)²,因此圆面积与正方形面积之比C/S就为Pi/4,于是就有Pi=4×C/S。

可以利用计算机随机产生大量位于正方形内部的点,通过点的数量去近似表示面积。假设位于正方形中点的数量为Ps,落在圆内的点的数量为Pc,则随机点的数量趋近于无穷时,4×Pc/Ps将逼近于Pi。


f03ef667be654bbaa8963b3f0f2ff3d9.png


2 程序设计

package com.oldlu
import scala.math.random
import org.apache.spark.{SparkConf, SparkContext}
/**
 * @author oldlu
 * @date 2021/11/2
 * @version 1.0
 */
object SparkPi {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("spark Pi")
    val spark = new SparkContext(conf)
    val slices = if (args.length > 0) args(0).toInt else 2
    val n = 100000 * slices
    val count = spark.parallelize(1 to n, slices).map { i =>
      val x = random * 2 - 1
      val y = random * 2 - 1
      if (x * x + y * y < 1) 1 else 0
    }.reduce(_ + _)
    println("Pi is roughly " + 4.0 * count / n)
    spark.stop()
  }
}

单击选择“Application”后,可在弹出对话框中设置参数,如图9-21所示,其中,“Name”设置为“sparkPi”;“Main class”设置为“com.csu.sparkPi”;“VM options”为“-Dspark.master=local -Dspark.app.name=sparkPi”;“Working directory”为系统自动设置的值;“Program arguments”不用填写;其余设置保持默认即可。

3 分布式运行

分布式运行是指在客户端(Client)以命令行的方式向Spark集群提交jar包的运行方式,所以需要将上述sparkPi程序编译成jar包(俗称打jar包)。

3.1 采用本地模式提交sparkAPP.jar

./spark-submit --master local --class com.oldlu.SparkPi /usr/local/sparkdemo/SparkPi.jar

3.2 采用Yarn-client或Yarn-cluster模式提交

注意,上述示例是作者计算机上的情形,读者看到的结果可能有一些差异。

读者也可以采用Yarn-client模式运行程序,这时只需要将提交命令中的“yarn-cluster”改为“yarn-client”即可,输出结果将直接显示在提交作业的终端中。


要正确执行上述命令,必须确保Spark集群中的Yarn已经启动。如果读者不能成功执行该命令,应首先检查一下系统是否启动了Yarn,如果没有,就需要设法启动它。例如,可以简单地通过启动Hadoop来启动Yarn,因为有的用户可能只安装了Hadoop自带的Yarn。

目录
相关文章
|
JavaScript CDN
js:spark-md5分片计算文件的md5值
js:spark-md5分片计算文件的md5值
1333 0
|
1月前
|
分布式计算 大数据 Java
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
49 5
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
50 3
|
1月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
60 0
|
3月前
|
分布式计算 Apache 数据安全/隐私保护
流计算引擎数据问题之在 Spark Structured Streaming 中水印计算和使用如何解决
流计算引擎数据问题之在 Spark Structured Streaming 中水印计算和使用如何解决
51 1
|
6月前
|
SQL 分布式计算 关系型数据库
Spark 分析计算连续三周登录的用户数
本文介绍了如何使用窗口函数`range between`来查询`login_time`为2022-03-10的用户最近连续三周的登录数。首先在MySQL中创建`log_data`表并插入数据,接着定义需求为找出该日期前连续三周活跃的用户数。通过Spark SQL,分步骤实现:1)确定统计周期,2)筛选符合条件的数据,3)计算用户连续登录状态。在初始实现中出现错误,因未考虑日期在周中的位置,修正后正确计算出活跃用户数。
111 6
|
6月前
|
SQL 分布式计算 Spark
【指标计算】Spark 计算指定用户与其他用户购买的相同商品
该代码示例使用Spark SQL解决查找指定用户(user01)与其他用户共同购买商品的问题。首先,创建SparkSession和模拟购买数据,然后通过SQL查询获取user01购买的商品集合。接着,对比所有用户购买记录,筛选出购买过相同商品且非user01的用户。输出显示了这些匹配用户的商品ID。关键在于使用`array_contains`函数检查商品是否在指定用户的购买列表中。遇到类似需求时,可参考Spark SQL官方函数文档。欢迎讨论复杂指标计算问题。
70 4
|
5月前
|
分布式计算 Serverless 数据处理
Serverless Spark计算服务
Serverless Spark计算服务
|
6月前
|
SQL 分布式计算 Hadoop
Spark分布式内存计算框架
Spark分布式内存计算框架
169 0
|
6月前
|
分布式计算 算法 数据挖掘
Spark中的图计算库GraphX是什么?请解释其作用和常用操作。
Spark中的图计算库GraphX是什么?请解释其作用和常用操作。
89 1