我有带Spark的DataStax Enterprise 4.8。我想使用Gradle构建用Scala编写的Spark应用程序,并在此DSE集群上运行它,但我想避免在运行时出现任何类路径问题。

目前,我的编译时依赖关系(和冲突解决方案)由Gradle自动管理,这在运行时已经引起了各种问题。

标准方法是什么?我想避免构建包含所有依赖项的胖子。

最佳答案

我只是会使用dse spark-classpath命令提供的库。我会将其合并到构建文件中,例如

对于SBT

val sparkClasspathStr = s"$DSE_HOME/bin/dse spark-classpath".!!.trim
val sparkClasspathArr = sparkClasspathStr.split(':')

//Find all Jars on dse spark-classpath
val sparkClasspath = {
  for ( dseJar <- sparkClasspathArr if dseJar.endsWith("jar"))
    yield Attributed.blank(file(dseJar))
}.toSeq

//Your dependencies
//libraryDependencies += "com.github.scopt" %% "scopt" % "3.2.0"

//Add dse jars to classpath
unmanagedJars in Compile ++= sparkClasspath
unmanagedJars in Test ++= sparkClasspath


摇篮

def DSE_HOME = (System.getenv("DSE_HOME") != null) ? System.getenv("DSE_HOME") : System.getenv("HOME")+"dse"

def sparkClasspathStr = (DSE_HOME + "/bin/dse spark-classpath").execute().text.trim()
def sparkClasspathJars = sparkClasspathStr.split(":").findAll{ it.endsWith(".jar") }

dependencies {
    compile files(sparkClasspathJars)
}

10-07 16:17