我有带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)
}