使用SBT部署提交Spark程序时遇org.apache包不存在错误求助
解决Spark + SBT编译错误:
object apache is not a member of package org 问题根源拆解
你遇到的编译报错,主要是由代码语法错误、SBT配置拼写失误和依赖仓库配置不全这三个问题共同导致的,咱们一步步来修复。
分步解决办法
1. 修正代码的语法错误
你的Scala代码里把package和import写在了同一行,这会让编译器错误地把import当成包名的一部分,自然找不到org.apache.spark这个正确的包路径。
修正后的代码:
package in.goai.spark import org.apache.spark.{SparkContext, SparkConf} object SparkMeApp { def main(args: Array[String]) { val conf = new SparkConf().setAppName("First Spark") val sc = new SparkContext(conf) val fileName = args(0) val lines = sc.textFile(fileName).cache val c = lines.count println(s"There are $c lines in $fileName") } }
2. 修复build.properties的拼写错误
你在first/project/build.properties里把sbt.version写成了bt.version,这会导致SBT无法加载你指定的版本,进而影响依赖包的解析。
修正后的build.properties:
sbt.version=0.13.9
3. 完善build.sbt的依赖配置
你的配置里只加了本地Maven仓库,如果本地没有缓存Spark的依赖包,就会拉取不到。咱们补上Maven中央仓库,确保依赖能正常下载。
修正后的build.sbt:
name := "First Spark" version := "1.0" organization := "in.goai" scalaVersion := "2.11.8" // 同时启用本地仓库和中央仓库,保证依赖能拉取到 resolvers ++= Seq( Resolver.mavenLocal, Resolver.mavenCentral ) // %%会自动匹配当前项目的Scala版本,无需手动写_2.11 libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.1"
4. 重新执行编译打包
先清理之前的编译缓存,再执行打包命令:
sbt clean package
额外优化建议
如果后续要把jar包提交到Spark集群运行,建议把Spark依赖的scope设置为provided——因为集群环境已经自带Spark的核心依赖,这样能避免打包出体积过大的jar包:
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.1" % "provided"
内容的提问来源于stack exchange,提问作者Bhaskar Das
相关产品推荐
相关产品推荐

