SBT构建Spark程序时遭遇依赖解析失败问题求助
解决SBT构建Spark程序时的依赖解析错误问题
看起来你在构建Spark应用时踩了几个常见的坑:依赖配置错误,还有代码里的小拼写失误,我来帮你一步步搞定。
首先修复代码里的拼写错误
你的helloSpark.scala里把SparkContext拼写成了SparkConetxt(两处都是),这会导致编译失败,先把这个改过来,另外建议加上sc.stop()避免资源泄漏:
import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf object HelloSpark { def main(args: Array[String]){ val conf = new SparkConf().setMaster("local").setAppName("Hello Spark") val sc = new SparkContext(conf) // 确保data.txt放在项目根目录,或者使用绝对路径 val sparkLineCount = sc.textFile("data.txt").filter(line => line.contains("spark")).count() println("lines with spark: %s".format(sparkLineCount)) // 关闭SparkContext释放资源 sc.stop() } }
然后修正SBT依赖配置
你的simple.sbt里的依赖问题是核心原因:
- Spark的
spark-core依赖已经自带了适配的Hadoop相关依赖,不需要手动添加hadoop-core、hadoop-client这些,手动添加反而会因为版本不匹配或者 artifact 不存在导致解析失败 - 你添加的
hadoop-client_2.11是针对Scala 2.11的,但你的项目用的是Scala 2.10.4,版本不匹配,自然找不到依赖
修正后的simple.sbt只需要保留必要的Spark核心依赖:
name := "Hello Spark" version := "1.0" scalaVersion := "2.10.4" // Spark核心依赖,会自动拉取所需的Hadoop相关依赖 libraryDependencies += "org.apache.spark" %% "spark-core" % "1.5.2" % "provided"
这里的provided标记是因为在Spark集群环境中已经预装了这些依赖,本地运行时如果遇到问题可以去掉这个标记。
最后验证项目结构并重新构建
确保你的项目文件夹结构是标准的SBT结构:
your-project-folder/ ├── src/ │ └── main/ │ └── scala/ │ └── helloSpark.scala ├── simple.sbt └── data.txt
然后在项目根目录运行sbt run,SBT会自动下载正确的依赖并执行你的程序。
如果还是遇到依赖下载缓慢或者失败的问题,可以添加国内Maven镜像加速:在项目根目录创建project/plugins.sbt,添加以下内容:
resolvers += "Aliyun Maven Repository" at "https://maven.aliyun.com/repository/public"
内容的提问来源于stack exchange,提问作者shakti prasad mohapatra
相关产品推荐
相关产品推荐

