Scala IDE和Apache Spark - 在构建路径中找到的不同scala库版本

时间:2015-04-27 03:52:40

标签: eclipse scala apache-spark


我有一些主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构建路径

Java Build Path error

...此警告出现在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


这不是问题吗?无论哪种方式,我该如何解决?

3 个答案:

答案 0 :(得分:4)

这通常不是问题,特别是当版本差异很小时,但没有保证......

问题是(如警告中所述)您的项目在类路径上有两个Scala库。一个明确配置为项目的一部分;这是版本2.10.2,随Scala IDE插件一起提供。另一个副本的版本为2.10.4,包含在Spark jar中。

解决此问题的一种方法是安装2.10.4附带的不同版本的Scala IDE。但这并不理想。如上所述,Scala IDE要求每个项目使用相同的库版本:

http://scala-ide.org/docs/current-user-doc/gettingstarted/index.html#choosing-what-version-to-install

更好的解决方案是通过替换您正在使用的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。

快乐的火花:

扎尔

>