Eclipse Scala IDE 代码未编译

Posted

技术标签:

【中文标题】Eclipse Scala IDE 代码未编译【英文标题】:Eclipse Scala IDE code not compiling 【发布时间】:2015-07-06 16:22:20 【问题描述】:

我从 scala-ide.org 网站下载了 eclipse scala ide,并尝试编译我的第一个 scala 字数统计程序。但它在以下导入命令中给出错误“对象不是包 org 的成员”

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._

经过一番研究,我发现我需要添加 jar 文件 spark-assembly-1.0.0-hadoop2.2.0.jar 来解决这个问题

但经过大量研究后,我找不到这个罐子。有人可以帮忙吗?

【问题讨论】:

与其寻找特定的 jar,我建议拥有一个 maven 项目并将 spark 作为 maven 依赖项添加(在 pom.xml 中手动或使用右键菜单)。 Eclipse/Scala IDE 与 maven 集成。这样,您的依赖项就在文件中声明(例如,您可以检查版本控制),而不仅仅是在您的 Eclipse 配置中。 【参考方案1】: 安装 SBT Scala 构建+依赖工具 创建一个空目录。将其命名为 spark-test 或您想为项目命名的任何名称。 将您的源代码放在子目录 src/scala/main 中。如果你在包 scalatest 中有 Main.scala,它应该是 src/scala/main/scalatest/Main.scala

制作一个包含以下内容的 build.sbt 文件

名称 := """sparktest"""

版本 := "1.0-SNAPSHOT"

scalaVersion := "2.11.7"

libraryDependencies ++= Seq( “org.apache.spark”%%“spark-core”%“1.4.0” )

配置 SBT Eclipse 插件。创建 ~/.sbt/0.13/plugins/plugins.sbt,使用:

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")

使用sbt eclipse生成一个Eclipse项目

将您的项目导入 Eclipse。 运行 :)

【讨论】:

感谢 Clay 的建议。这将起作用..但是用非常简单的术语来说,我们可以知道哪个jar文件具有org.apache.spark的所有属性如果我们可以在这里添加这个库,那么在eclipse中的解决方案应该非常简单,然后代码将被编译并在spark中- 提交,因为我们已经拥有将执行程序所需的所有 jar。如果我的理解有误,请告诉我 @Peter2711 :mvnrepository.com/artifact/org.apache.spark 中列出的 jar 文件具有所有依赖项。我认为没有任何“单一”的 jar 会具有所有依赖项。但是,我上面提供的解决方案有提到的jar文件。 spark-core 有一个 .jar 文件。但是,该 .jar 文件依赖于许多其他 .jar 文件。您需要所有这些。手动处理是不切实际的。你基本上需要一个构建+依赖工具,比如 Maven、Gradle 或 SBT。我知道您现在想避免构建+依赖工具的复杂性,但是除了超级简单的零依赖任务之外,基本上有必要使用 Java/Scala。 正如@javadevg 所说,您可以尝试从mvnrepository.com/artifact/org.apache.spark/spark-core_2.11/… 手动下载,但如果您在 spark-submit 之外运行并且您没有设置传递依赖项,则可能会遇到运行时问题。跨度> 【参考方案2】:

Scala 不是一门简单的语言/环境来学习。了解 scala 的工作原理然后进入 spark 是很重要的。 网络上有大量可用的材料。正确的学习路径是学习 SBT > SCALA > 将 Scala 用于 Spark

你提到的依赖,可以放在他sbt的build.sbt中。您也可以使用 maven,但我建议学习 sbt 作为学习 scala 的方式。一旦你解决了使用 SBT 的依赖关系,你的简单代码应该可以正常工作。但是,我仍然建议先做一个“hello world”,而不是做一个“字数统计”:-)

Ando 回答您的问题,在您的 SBT 中您应该添加以下库,

libraryDependencies += "org.apache.spark" % "spark-assembly_2.10" % "1.1.1"

这是用于 hadoop 2.10 的 spark 组件 1.1.1。我知道你需要一个不同的版本,你可以在

找到合适的版本

Maven Repo details for spark/hadoop

这是纯 Eclipse 解决方案(我必须下载并设置 Eclipse 才能回答这个问题)

    获取 Scala IDE(它带有内置的 Scala 编译器版本 2.10.5 和 2.11.6) 创建新项目 Scala 向导 > Scala 项目 在缩放项目中右键“src”,选择“Scala Object”,给它起个名字——我给了WordCount 右键项目>配置>转换为Maven项目 在字数统计对象的正文中(我将对象命名为 WordCount)粘贴来自Apache Spark Example 的文本,最终看起来像

```

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object WordCount 
    val sparkConf = new SparkConf().setAppName("SampleTest")
    val spark = new SparkContext(sparkConf)
    val textFile = spark.textFile("hdfs://...")
    val counts = textFile.flatMap(line => line.split(" "))
                                   .map(word => (word, 1))
                                   .reduceByKey(_ + _)
    counts.saveAsTextFile("hdfs://...")

``` 6. 将以下内容添加到您的 Maven 中

```

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>1.4.0</version>
</dependency>

```

    右击“Scala Library Container”,选择“Latest 2.10 bundle”,点击ok 完成这些操作后,我的 Eclipse 的“问题”列表中没有显示任何错误消息...表明它按预期编译。 显然,这个示例无法运行,因为我没有提供足够的信息来运行它……但这只是为了回答“如何编译代码”这个问题。

希望这会有所帮助。

【讨论】:

感谢您的激励演讲。我从去年开始就在 scala 上工作。但是是的,使用 scala ide 在 eclipse 中编写代码对我来说是新的。我想在eclipse中编译代码并使用提交命令执行它。如果您对此有所了解,请告诉我.. 否则您可以忽略这个问题.. 我不建议在这个阶段使用 SBT - 它不是 scala,而是在 scala 之上它自己的(复杂的)东西,它的 eclipse 集成比 maven 的差得多。 (最终,如果您想发布 scala 库供其他人使用,您可能必须学习 SBT,因为 maven 无法轻松地交叉构建一些东西以使用多个版本的 scala,但与此同时 maven 更简单,更好用)。 @lmm 我同意你的观点,SBT 不像 maven 那样简单。但是,如果您打算将 scala 作为首选语言,那么努力是值得的。 您好,感谢您的解释,但我尝试了您建议的方式,但没有奏效。仍然无法识别导入语句 你能从 scala IDE 的“问题”选项卡中粘贴行吗?

以上是关于Eclipse Scala IDE 代码未编译的主要内容,如果未能解决你的问题,请参考以下文章

如何解决scala ide 找不到或无法加载主类

Eclipse IDE 调试 - 代码未反映新更改

Eclipse IDE 未显示正确的输出

用Java在各种框架下编译Scala项目

Eclipse Scala IDE:如何构建独立的 Scala 应用程序?

eclipse 开发 scala