Apache spark sbt:在不破坏依赖关系的情况下使用本地jar
我正在构建一个使用Spark和Spark mllib的应用程序,build.sbt将依赖项声明如下:Apache spark sbt:在不破坏依赖关系的情况下使用本地jar,apache-spark,sbt,apache-spark-mllib,Apache Spark,Sbt,Apache Spark Mllib,我正在构建一个使用Spark和Spark mllib的应用程序,build.sbt将依赖项声明如下: 3 libraryDependencies ++= Seq( 4 "org.apache.spark" %% "spark-core" % "1.6.0" withSources() withJavadoc(), 5 "org.apache.spark" %% "spark-mllib" % "1.6.0" withSources() withJavadoc()
3 libraryDependencies ++= Seq(
4 "org.apache.spark" %% "spark-core" % "1.6.0" withSources() withJavadoc(),
5 "org.apache.spark" %% "spark-mllib" % "1.6.0" withSources() withJavadoc()
6 )
这个很好用。现在我想更改mllib中的一些代码,并使用sbt重新编译应用程序,下面是我所做的:
1 lazy val commonSettings = Seq(
2 scalaVersion := "2.10.5",
3 libraryDependencies ++= Seq(
4 "org.apache.spark" %% "spark-core" % "1.6.0" withSources() withJavadoc(),
5 "org.apache.spark" %% "spark-streaming" % "1.6.0" withSources() withJavadoc(),
6 "org.apache.spark" %% "spark-sql" % "1.6.0" withSources() withJavadoc(),
7 "org.scalanlp" %% "breeze" % "0.11.2"
8 )
9 )
10 lazy val core = project.
11 settings(commonSettings: _*).
12 settings(
13 name := "xSpark",
14 version := "0.01"
15 )
16
17 lazy val example = project.
18 settings(commonSettings: _*).
19 settings(
20 name := "xSparkExample",
21 version := "0.01"
22 ).
23 dependsOn(core)
xSparkExample包括一个调用xSpark的KMeans示例,xSpark在spark mllib中调用KMeans函数。这个spark mllib是一个定制的jar,我把它放在core/lib目录中,这样sbt就可以把它作为本地依赖项来获取
但是,由于某些原因,运行我的应用程序仍然不使用定制的jar。我甚至使用
find-命名为“spark-mllib_2.10-1.6.0.jar”
以确保我的系统上不存在其他jar 一种方法是将自定义mlib作为非托管依赖项。
非托管依赖项放在一个目录中,SBT将按原样提取它们,因此您还负责提供它们的依赖项。
您可以在此处阅读有关非托管依赖项的内容:
因此,您可以尝试以下方法:
lib
目录,并在那里添加自定义的mlib jar。这是非托管LIB的默认位置,sbt将自动拾取它另一种方法是拥有自己的maven repo(artifactory),将自定义工件放置在何处,并让sbt首先从该存储库中提取。这样做的好处是,其他人可以构建代码并使用自定义mlib库。一种方法是将自定义mlib作为非托管依赖项。 非托管依赖项放在一个目录中,SBT将按原样提取它们,因此您还负责提供它们的依赖项。 您可以在此处阅读有关非托管依赖项的内容: 因此,您可以尝试以下方法:
lib
目录,并在那里添加自定义的mlib jar。这是非托管LIB的默认位置,sbt将自动拾取它另一种方法是拥有自己的maven repo(artifactory),将自定义工件放置在何处,并让sbt首先从该存储库中提取。这样做的好处是,其他人可以构建代码并使用您的自定义mlib库。非常感谢。但我认为unmanagedBase:=baseDirectory.value/“custom_lib”仅在我想使用lib以外的目录来承载我的自定义jar时使用?是的,对不起,这是一个错误的复制和粘贴,我更正了它。您不需要添加“custom_lib”,我想指出的是保存mlib所有依赖项的pom。我使用了第一种方法,但自定义jar似乎仍然没有被使用,我已经用新的build.sbt文件更新了我的帖子。非常感谢。但我认为unmanagedBase:=baseDirectory.value/“custom_lib”仅在我想使用lib以外的目录来承载我的自定义jar时使用?是的,对不起,这是一个错误的复制和粘贴,我更正了它。您不需要添加“custom_lib”,我想指出保存mlib所有依赖项的pom。我使用了第一种方法,但自定义jar似乎仍然没有被选中,我已经用新的build.sbt文件更新了我的帖子。