Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何使用修改后的Spark MLlib模块作为依赖项?_Apache Spark_Amazon Ec2_Sbt_Apache Spark Mllib_Sbt Assembly - Fatal编程技术网

Apache spark 如何使用修改后的Spark MLlib模块作为依赖项?

Apache spark 如何使用修改后的Spark MLlib模块作为依赖项?,apache-spark,amazon-ec2,sbt,apache-spark-mllib,sbt-assembly,Apache Spark,Amazon Ec2,Sbt,Apache Spark Mllib,Sbt Assembly,我想构建一个Spark应用程序Jar。我的期望是:当我通过/spark submit执行jar时,应用程序将使用我自己构建的mllib(例如:spark-mllib_2.11-2.2.0-SNAPSHOT.jar) 这是我的build.sbt: name:="SoftmaxMNIST" version := "1.0" scalaVersion := "2.11.4" unmanagedJars in Compile += file("lib/spark-mllib_2.11-2.2.0-SNA

我想构建一个Spark应用程序Jar。我的期望是:当我通过
/spark submit
执行jar时,应用程序将使用我自己构建的mllib(例如:
spark-mllib_2.11-2.2.0-SNAPSHOT.jar

这是我的
build.sbt

name:="SoftmaxMNIST"
version := "1.0"
scalaVersion := "2.11.4"
unmanagedJars in Compile += file("lib/spark-mllib_2.11-2.2.0-SNAPSHOT.jar")

libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.1.0",
"org.apache.spark" %% "spark-sql" % "2.1.0 
)

// META-INF discarding
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
{
  case PathList("META-INF", xs @ _*) => MergeStrategy.discard
  case x => MergeStrategy.first
}
}
name:=“SoftmaxMNIST”
版本:=“1.0”
规模规避:=“2.11.4”
Compile+=文件(“lib/spark-mllib_2.11-2.2.0-SNAPSHOT.jar”)中的unmanagedJars
libraryDependencies++=Seq(
“org.apache.spark”%%“spark核心”%%“2.1.0”,
“org.apache.spark”%%“spark sql”%%”2.1.0
)
//META-INF丢弃
程序集mergeStrategy.discard中的mergeStrategy
案例x=>MergeStrategy.first
}
}
我已经将自己构建的
spark-mllib_2.11-2.2.0-SNAPSHOT.jar
放到
/my Project Path/lib/
目录中。但它不起作用。应用程序似乎仍在使用spark的默认
mllib jar
,在我的情况下,它位于
Path/spark-2.1.0-bin-hadoop2.7/jars/
目录中

PS:最终目的是,当我在AWS EC2上运行我的应用程序时,我的应用程序总是使用我自己构建的
mllib
,而不是默认的。我可以经常修改我自己的
mllib


谁能帮我解决这个问题。提前谢谢!

答案取决于你如何
spark submit
。你必须“说服”(aka modify)
spark submit
才能看到修改过的jar(而不是
spark\u HOME
中的jar)

最快的(从长远来看不一定是最简单的)方法是在uberjar(又名fat jar)中包含Spark jar,包括您修改过的Spark jar。您似乎在sbt项目中使用sbt汇编插件,所以这只是依赖项的问题(或放入
lib
目录)并将其添加到项目中的
libraryDependencies
Assembly
将完成其余工作

然而,这将给您一个非常巨大的jar,在繁重的开发周期中,大量的编译、测试和部署可能会使过程非常缓慢

另一种方法是使用定制的ApacheSpark(包括Spark MLlib的修改库)。安装
mvn
后,您就可以使用定制的Spark了。使用定制版本中的
Spark submit
,它应该可以工作。您不必将jar包含在fat jar中,也可能不必使用任何sbt汇编插件(只需一个
sbt包
就可以了)

这种方法的好处是使您的可部署Spark应用程序包更小,并且自定义Spark与开发过程保持分离。使用内部库存储库来发布和依赖