Spark调用requests-scala报NoClassDefFoundError问题求助
解决Spark运行时
java.lang.NoClassDefFoundError: requests/package$问题 问题原因
这个错误是因为运行时找不到requests-scala包的类文件。sbt package默认只打包你的项目代码,不会将依赖库一起打包,导致Spark集群运行时无法加载缺失的依赖类。
解决方案
1. 打包包含所有依赖的胖JAR(推荐)
使用sbt-assembly插件生成胖JAR,把项目代码和所有依赖打包在一起:
- 在项目的
project/plugins.sbt中添加插件:addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.2.0") - 执行打包命令:
sbt assembly - 找到生成的胖JAR(通常在
target/scala-<你的Scala版本>/目录下,文件名包含-assembly后缀),用spark-submit运行:spark-submit --class 你的主类全路径 路径/xxx-assembly-xxx.jar
2. 提交时直接指定依赖
如果不想打包胖JAR,可以在spark-submit命令中通过--packages参数引入requests-scala依赖:
spark-submit --class 你的主类全路径 --packages com.lihaoyi:requests_2.12:0.8.0 路径/你的普通JAR包.jar
注意:命令中的2.12要和你的Scala版本匹配,比如Spark 2.x通常用Scala 2.11,Spark 3.x用2.12,需对应修改。
3. 确认build.sbt配置正确性
检查build.sbt中的Scala版本和依赖配置,确保和Spark使用的Scala版本一致:
scalaVersion := "2.12.15" // 匹配你的Spark对应的Scala版本 libraryDependencies += "com.lihaoyi" %% "requests" % "0.8.0"
内容的提问来源于stack exchange,提问作者edwynn
相关产品推荐
相关产品推荐

