当前位置: 首页 > 知识库问答 >
问题:

如何有效地使用SBT、Spark和“提供的”依赖项?

饶滨海
2023-03-14

我正在用Scala构建一个Apache Spark应用程序,并使用SBT来构建它。事情是这样的:

  1. 当我在IntelliJ IDEA下开发时,我希望将Spark依赖项包含在类路径中(我正在启动一个带有主类的常规应用程序)
  2. 当我打包应用程序(多亏了sbt-assembly)插件时,我不希望Spark依赖项包含在我的fat jar中
  3. 当我通过SBT测试运行单元测试时,我希望Spark依赖项包含在类路径中(与#1相同,但来自SBT)
libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-streaming" % sparkVersion % "provided",
  ...
)
run in Compile <<= Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run))

对于Maven,我使用了一个特定的概要文件来构建uber jar。这样,我将Spark依赖项声明为主概要文件(IDE和单元测试)的常规依赖项,同时将它们声明为fat JAR打包的提供的。参见https://github.com/aseigneurin/kafka-sandbox/blob/master/pom.xml

用SBT实现这一点的最佳方法是什么?

共有1个答案

潘银龙
2023-03-14

在IntelliJ配置中使用新的“包含具有”提供的“作用域的依赖项”。

 类似资料:
  • 我试图构建一个具有spark依赖关系的非常基本的scala脚本。但我不能用它做罐子。 我的scala源代码在: /exampleapp/main/scala/example/hello.scala 项目名为exampleapp。

  • 我需要为我的一个子项目构建一个jar,包括依赖项,以便它可以用作。 我有一个多模块的sbt项目,这个模块是最低级别的(也是纯Java)。 我可以(例如使用sbt-onejar、sbt-proGuard或sbt组件)覆盖最低级别模块的打包方式吗? 看起来这些工具真的被设计成发布后的步骤,但是我真的需要一个(替换或附加的)发布的人工制品来包含依赖项(但只适用于这一个模块)。 更新:发布sbt程序集是针

  • 版本:=“1.0” scalaVersion:=“2.11.8” ivyScala:=ivyScala.Value map{_.copy(overrideScalaVersion=true)} libraryDependencies+=“org.apache.spark”%%“Spark-Core”%“2.1.0” 当我尝试用sbt组装jar时,我试图将spark引入我的开发环境,但它失败了,并且

  • 问题内容: 我编写了一个pyspark脚本,该脚本读取两个json文件,然后将它们发送到elasticsearch集群。当我在本地运行该文件时,一切都会正常运行(大部分情况下),我下载了和类的jar文件,然后使用pyspark使用参数运行我的工作,并且可以看到在我的Elasticsearch集群中出现的文档。 但是,当我尝试在Spark群集上运行它时,出现此错误: 在我看来,这很清楚:工人无法使用

  • 我目前正在尝试将一个通过RFC连接到SAP系统的旧Java EE解决方案迁移到Quarkus。由于项目使用maven,我再次面临sapjco3的问题。来自SAP的jar库,防止该库被重命名。如果我像那样添加库作为依赖项 它将被添加到lib目录中,名称为com.sap.sapjco3-3.1.jar.不幸的是,最终以异常结束 JAVAlang.ExceptionInInitializerError: