如何从sbt Shell启动Spark并使用项目对象(不依赖spark-shell)
在sbt Shell中启动Spark并调用项目内对象
1. 配置项目依赖(build.sbt)
先确保build.sbt里包含匹配Scala版本的Spark核心依赖(比如Spark 3.5.0对应Scala 2.12/2.13):
name := "MySparkProject" version := "0.1" scalaVersion := "2.12.18" // 版本需与Spark兼容 libraryDependencies ++= Seq( "org.apache.spark" %% "spark-core" % "3.5.0", "org.apache.spark" %% "spark-sql" % "3.5.0" // 按需添加spark-streaming等其他模块 )
2. 编写项目内的Spark对象
在src/main/scala/com/yourpackage/下创建包含Spark逻辑的对象,示例:
package com.yourpackage import org.apache.spark.sql.SparkSession object MySparkJob { // 定义可调用的业务方法 def runTask(): Unit = { val spark = SparkSession.builder() .master("local[*]") // 本地测试用,集群环境需移除 .appName("CustomSparkJob") .getOrCreate() // 这里写你的Spark业务逻辑 val testData = Seq(("Alice", 25), ("Bob", 30)) val df = spark.createDataFrame(testData).toDF("name", "age") df.show() spark.stop() } // 可选:提供main方法方便直接运行 def main(args: Array[String]): Unit = { runTask() } }
3. 在sbt Shell中启动调用
方式一:直接运行完整应用
终端进入项目根目录启动sbt Shell:
sbt
在sbt Shell中执行:
runMain com.yourpackage.MySparkJob
若存在多个main类,sbt会提示输入对应编号选择运行。
方式二:交互式调用方法
在sbt Shell中进入Scala控制台:
console
导入对象并调用方法:
import com.yourpackage.MySparkJob MySparkJob.runTask()
适合调试和快速验证逻辑。
注意事项
- 本地运行时不要给Spark依赖加
providedscope,否则sbt会找不到依赖包;集群打包时再添加该配置。 master("local[*]")仅用于本地测试,提交到集群时需删除,由集群管理器分配资源。
内容的提问来源于stack exchange,提问作者Cameron Burley
相关产品推荐
相关产品推荐

