首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用sbt火花封装插件理解build.sbt

用sbt火花封装插件理解build.sbt
EN

Stack Overflow用户
提问于 2019-02-20 23:27:26
回答 1查看 1.9K关注 0票数 0

我是新的scala和SBT构建文件。在入门教程中,将火花依赖项添加到scala项目应该是通过sbt火花包插件直接进行的,但是我得到了以下错误:

代码语言:javascript
复制
[error] (run-main-0) java.lang.NoClassDefFoundError: org/apache/spark/SparkContext

请提供资源,以了解更多关于什么可能是驱动错误,因为我想更彻底地理解过程。

代码:

代码语言:javascript
复制
trait SparkSessionWrapper {

  lazy val spark: SparkSession = {
    SparkSession
      .builder()
      .master("local")
      .appName("spark citation graph")
      .getOrCreate()
  }

  val sc = spark.sparkContext

}


import org.apache.spark.graphx.GraphLoader

object Test extends SparkSessionWrapper {

  def main(args: Array[String]) {
    println("Testing, testing, testing, testing...")

    var filePath = "Desktop/citations.txt"
    val citeGraph = GraphLoader.edgeListFile(sc, filepath)
    println(citeGraph.vertices.take(1))
  }
}

plugins.sbt

代码语言:javascript
复制
resolvers += "bintray-spark-packages" at "https://dl.bintray.com/spark-packages/maven/"

addSbtPlugin("org.spark-packages" % "sbt-spark-package" % "0.2.6")

build.sbt --工作。为什么libraryDependencies运行/工作?

代码语言:javascript
复制
spName := "yewno/citation_graph"

version := "0.1"

scalaVersion := "2.11.12"

sparkVersion := "2.2.0"

sparkComponents ++= Seq("core", "sql", "graphx")

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

build.sbt -不起作用。应该编译并正确运行。

代码语言:javascript
复制
spName := "yewno/citation_graph"

version := "0.1"

scalaVersion := "2.11.12"

sparkVersion := "2.2.0"

sparkComponents ++= Seq("core", "sql", "graphx")

奖金的解释+链接到资源,以了解更多关于SBT构建过程,jar文件,以及任何其他可以帮助我提高速度!

EN

回答 1

Stack Overflow用户

发布于 2019-02-21 01:04:33

sbt-火花塞插件provided作用域中提供依赖关系:

代码语言:javascript
复制
sparkComponentSet.map { component =>
  "org.apache.spark" %% s"spark-$component" % sparkVersion.value % "provided"
}.toSeq

我们可以通过从sbt运行show libraryDependencies来确认这一点:

代码语言:javascript
复制
[info] * org.scala-lang:scala-library:2.11.12
[info] * org.apache.spark:spark-core:2.2.0:provided
[info] * org.apache.spark:spark-sql:2.2.0:provided
[info] * org.apache.spark:spark-graphx:2.2.0:provided

provided范围意味着:

该依赖项将是编译和测试的一部分,但不包含在运行时。

因此,sbt run抛出java.lang.NoClassDefFoundError: org/apache/spark/SparkContext

如果我们真的想在provided类路径上包含run依赖项,那么@douglaz建议:

代码语言:javascript
复制
run in Compile := Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run)).evaluated
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54796866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档