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
Apache spark 运行时的sbt交换机依赖项_Apache Spark_Sbt_Sbt Assembly - Fatal编程技术网

Apache spark 运行时的sbt交换机依赖项

Apache spark 运行时的sbt交换机依赖项,apache-spark,sbt,sbt-assembly,Apache Spark,Sbt,Sbt Assembly,我正在开发一个使用xgboost4j的spark应用程序。 由于jar的本地C依赖性,这个包需要编译到本地架构。但是集群的体系结构与开发笔记本电脑不同。当通过集群中的一个组件运行sbt assembly时,如何替换包?或者您是否建议通过%“提供”来解决此问题?对(提供/编译)libs使用后缀,如下所示: val suffix = Option(System getProperty "provided").isDefined match { case true => "provi

我正在开发一个使用xgboost4j的spark应用程序。

由于jar的本地C依赖性,这个包需要编译到本地架构。但是集群的体系结构与开发笔记本电脑不同。当通过集群中的一个组件运行sbt assembly时,如何替换包?或者您是否建议通过%“提供”来解决此问题?

对(提供/编译)libs使用后缀,如下所示:

val suffix = Option(System getProperty "provided").isDefined match {
    case true  => "provided"
    case false => "compile"
  }

libraryDependencies += "org.apache.spark" %% "spark-sql" % Spark.version % suffix

并运行
sbt-Dprovided assembly
如果您需要uberjar中的所有JAR

您可以为来自目标环境和开发环境的工件提供不同的分类器或工件ID吗?如果是,那么您可以使用系统属性在工件之间切换(正如在其他问题中提到的-我不想在确认之前发布答案;)。您是指阶段吗?我认为这应该是可能的。但这会在本地架构中编译吗?编译是否在运行中执行?@GeorgHeiler它将使用以前编译的依赖项。这就是我的问题——如果您可以在项目构建之前提供两个不同的JAR,那么这个答案是正确的(我以前建议过,但FaigB是第一个,所以我不会发布重复的)。如果您必须动态编译模块(在编译应用程序期间),我认为这个答案是不正确的,因此我应该使用名称xgboost local构建xgboost4j jar一次本地,为cluster xgboost cluster构建一次?两个选项:您可以按照编写的方式进行,也可以使用相同的工件ID进行构建,但在生产中,您将使用提供的依赖项,通过--jar选项添加到Spark Submit中。本地存储库中的版本将用于开发人员机器,但集群上的jar将只针对集群进行编译,而不包括在应用程序的uber jar中。两种选择都可以。只有在每次构建模块时都要编译xgboost时,问题才会出现