我有一些主object
:
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
object Main {
def main(args: Array[String]) {
val sc = new SparkContext(
new SparkConf().setMaster("local").setAppName("FakeProjectName")
)
}
}
...然后我将spark-assembly-1.3.0-hadoop2.4.0.jar
添加到Eclipse的构建路径中
项目> 属性...... > Java构建路径:
...此警告出现在Eclipse控制台中:
More than one scala library found in the build path
(C:/Program Files/Eclipse/Indigo 3.7.2/configuration/org.eclipse.osgi/bundles/246/1/.cp/lib/scala-library.jar,
C:/spark/lib/spark-assembly-1.3.0-hadoop2.4.0.jar).
This is not an optimal configuration, try to limit to one Scala library in the build path.
FakeProjectName Unknown Scala Classpath Problem
然后我从构建路径中删除Scala Library [2.10.2]
,它仍然有效。除此之外,此警告出现在Eclipse控制台中:
The version of scala library found in the build path is different from the one provided by scala IDE:
2.10.4. Expected: 2.10.2. Make sure you know what you are doing.
FakeProjectName Unknown Scala Classpath Problem
这不是问题吗?无论哪种方式,我该如何解决?
答案 0 :(得分:4)
这通常不是问题,特别是当版本差异很小时,但没有保证......
问题是(如警告中所述)您的项目在类路径上有两个Scala库。一个明确配置为项目的一部分;这是版本2.10.2,随Scala IDE插件一起提供。另一个副本的版本为2.10.4,包含在Spark jar中。
解决此问题的一种方法是安装2.10.4附带的不同版本的Scala IDE。但这并不理想。如上所述,Scala IDE要求每个项目使用相同的库版本:
更好的解决方案是通过替换您正在使用的Spark jar来清理类路径。你拥有的是一个程序集jar,这意味着它包含了生成它的构建中使用的每个依赖项。如果您使用的是sbt或Maven,那么您可以删除程序集jar,只需添加Spark 1.3.0和Hadoop 2.4.0作为项目的依赖项。在构建期间,每个其他依赖项都会被拉入。如果你还没有使用sbt或Maven,那么也许给sbt一个旋转 - 设置一个带有几个库依赖项的build.sbt文件真的很容易,并且sbt有一定程度的支持来指定哪个库版本为使用。
答案 1 :(得分:4)
最简单的解决方案:
在Eclipse中: 1.项目/(righclick)属性 2.转到Scala编译器 3.单击“使用项目设置” 4.将Scala安装设置为兼容版本。一般固定Scala安装2.XX.X(内置) 5.重建项目。
答案 2 :(得分:0)
有两种类型的Spark JAR文件(只需查看名称):
- Name includes the word "assembly" and not "core" (has Scala inside)
- Name includes the word "core" and not "assembly" (no Scala inside).
您应该通过“添加外部JAR”在构建路径中包含“核心”类型 (您需要的版本),因为Scala IDE已经为您推送了一个Scala。
或者,您可以利用SBT并添加以下内容 依赖(再次,注意你需要的版本):
libraryDependencies + =“org.apache.spark”%“spark-core_2.11”%“2.1.0”
然后你不应该在Build Path中“强制”包含任何spark JAR。
快乐的火花:
扎尔
>