我正在尝试在Eclipse上开发一个spark应用程序,然后逐步调试它。
我下载了Spark源代码,并在Eclipse中添加了一些spark子项目(例如spark-core)。现在,我正在尝试使用Eclipse开发一个spark应用程序。我已经在Eclipse上安装了ScalaIDE。我基于Spark网站提供的示例创建了一个简单的应用程序。
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp {
def main(args: Array[String]) {
val logFile = "YOUR_SPARK_HOME/README.md" // Should be some file on your system
val conf = new SparkConf().setAppName("Simple Application")
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
}
}
在我的项目中,我将spark-core
项目添加为依赖项目(右键单击 - >构建路径 - >添加项目)。现在,我正在尝试构建我的应用程序并运行它。但是,我的项目显示它有错误,但我没有看到Eclipse中问题视图中列出的任何错误,也没有看到任何以红色突出显示的行。所以,我不确定问题是什么。我的假设是我需要在我的项目中添加外部罐子,但我不确定这些罐子会是什么。该错误是由val conf = new SparkConf().setAppName("Simple Application")
和后续行引起的。我尝试删除这些行,错误消失了。非常感谢任何帮助和指导,谢谢!
答案 0 :(得分:3)
您似乎没有使用任何软件包/库管理器(例如sbt,maven),这应该可以消除任何版本问题。 设置正确版本的java,scala,spark及其所有后续依赖项可能具有挑战性。 我强烈建议将您的项目更改为Maven : Convert Existing Eclipse Project to Maven Project
就个人而言,我在IntelliJ IDEA(https://confluence.jetbrains.com/display/IntelliJIDEA/Getting+Started+with+SBT)上有很好的经验,易于设置和维护。
答案 1 :(得分:3)
我前几天刚为Spark创建了一个Maven原型 它在Eclipse / Idea中使用 Scala 2.10.4 设置了一个新的 Spark 1.3.0 项目。
只需按照说明here。
您必须在生成项目后更改Scala版本:
右键单击生成的项目并选择:
Scala > Set the Scala Installation > Fixed 2.10.5.(bundled)
ScalaIDE (当前2.11.6
)附带的默认版本会在 ScalaIDE 中检测到scala-maven-plugin
时自动添加到项目中POM。
如果有人知道如何从Maven设置 Scala库容器 版本,我会感激您的反馈,同时它会引导一个新项目。 ScalaIDE 在哪里查找Scala版本(如果有的话)?
BTW只需确保在调试器中使用Spark代码之前下载源代码(Project right-click > Maven > Download sources
)。
如果你想使用(恕我直言)最好的Eclipse好东西(引用,类型层次结构,调用层次结构),你必须自己构建Spark,以便所有源都在你的构建路径上(如Maven Scala依赖关系不是由 EclipseIDE / JDT 处理的,即使它们当然是在构建路径上。)
有趣的调试,我可以告诉你,它帮助我深入了解Spark并真正了解它是如何工作的。)
答案 2 :(得分:1)
您可以尝试添加spark-assembly.jar
。
正如其他人所说,更好的方法是使用Sbt(或Maven)来管理您的依赖项。 spark-core
本身有许多依赖项,只添加一个jar就不够了。
答案 3 :(得分:0)
您尚未在spark代码中指定主控。因为您在本地计算机上运行它。替换以下行
val conf = new SparkConf().setAppName("Simple Application")
与
val conf = new SparkConf().setAppName("Simple Application").setMaster("local[2]")
这里“local [2]”表示将使用2个线程。