我对Spark和Scala很新。我正在尝试做的是简单的WordCount工作。
package demo
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.SparkContext._
object WordCount extends App {
// Create a Scala Spark Context.
val conf = new SparkConf().setAppName("wordCount").setMaster("spark://MyHost")
val sc = new SparkContext(conf)
// Load our input data.
val input = sc.textFile("words.txt")
// Split it up into words.
val words = input.flatMap(line => line.split(" "))
// Transform into word and count.
val counts = words.map(word => (word, 1)).reduceByKey{case (x, y) => x + y}
// Save the word count back out to a text file, causing evaluation.
counts.saveAsTextFile("wordsCount.txt")
}
我已经设置了一个Master并启动了一个与Master连接的Worker。
当我运行示例时,我收到以下错误:
Lost task 1.0 in stage 0.0 (TID 1, MyHost): java.lang.ClassNotFoundException: demo.WordCount$$anonfun$2
我真的不知道这意味着什么。
我的build.sbt看起来像这样:
name := "SimpleWordCount"
version := "0.0.1"
scalaVersion := "2.10.4"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.2.0" % "provided"
)
答案 0 :(得分:2)
代码看起来很好,错误告诉你他找不到方法中定义的一个闭包(现在表示为匿名类,因此“ClassNotFound”错误)。它似乎是版本和/或部署问题。我的猜测是jar代码没有部署到spark节点。
首先在build.sbt中使用版本“1.2.1”作为spark(作为主节点),然后检查http://spark.apache.org/docs/1.2.1/submitting-applications.html如何将jar提交到服务器,第三个可以省略您的代码中的“setMaster”作为提交脚本将暂时处理它。
答案 1 :(得分:1)
您需要将必要的jar设置为spark context
val conf = new SparkConf().setAppName("wordCount").setMaster("spark://MyHost").setJars(Seq("$HOME/WordCount.jar",...))