Работа с кластером на языке Scala

В начале инициализируйте Spark-сессию:

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder.appName("SparkPi").getOrCreate()

В конце программы обязательно завершайте сессию:

spark.stop()

Пример программы на Scala (./src/main/scala/SparkPi.scala):

package org.apache.spark.examples

import scala.math.random

import org.apache.spark.sql.SparkSession

/** Computes an approximation to pi */
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
    val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow
    val count = spark.sparkContext.parallelize(1 until 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(s"Pi is roughly ${4.0 * count / (n - 1)}")
    spark.stop()
  }
}

Сборка приложения:
./build.sbt:

name := "Spark Pi"

version := "1.0"

scalaVersion := "2.12.18"

libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.5.5"
sbt package

Запуск программы на кластере:

spark-submit --jars /opt/spark-plugins/rapids-4-spark_2.12-25.06.0.jar --class "SparkPi" spark-pi_2.12-1.0.jar