Jetbrains IDEA Ultimate 2018.3.1
sbt 1.2.7
scala 2.11.8
在这里卡住快一学期了,终于解决。
1.运行scala版本的wordCount,首先new project,选择sbt,选版本号,等idea帮我们做好默认配置,没啥好讲
2.去maven repository官网查询spark-core和scala版本的对应关系,并添加到build.sbt文件中。
这里要注意,第一文件中配置的形式类似键值对,各“键值对”之间用空行隔开;
第二scala版本、spark-core版本必须对应,否则会报错。这个只要照着maven中对应版本来就行
3.随便找个文本文档,写WordCount进行测试
package com.lightdance
import org.apache.spark.{SparkConf, SparkContext}
object FirstTest {
val INPUT_FILE = "./src/main/scala/README.md"
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("wordCount")
val sc = new SparkContext(conf)
val input = sc.textFile(INPUT_FILE)
val words = input.flatMap(line => line.split(" "))
val counts = words.map(word => (word, 1)).reduceByKey { case (x, y) => x + y }
counts.saveAsTextFile("./outputFiles")
}
}
4.程序报错a master url must be set in your configuration
这个问题是因找不到程序运行的master,只要设置一下idea的环境变量选项就ok:
run->edit configuration->VM options里面加上 -Dspark.master=local
5.最最头大的问题,无法找到主类 =
好久好久,终于发现原因。
写java习惯了,等号这样的运算符跟变量之间习惯性地会加上空格,结果在设置VM options的时候, -Dspark.master=local给写成了 -Dspark.master = local
然而这个东西并不会像java语句那样无视空格,它把空格当作参数了...
因此只要将 -Dspark.master = local里面的空格去掉就好了。
另外需要注意,sbt项目里每个object间是相对独立的,对一个可运行的object的run->edit configuration->VM options更改不会影响到其他可运行的object程序。因此运行同一个项目中其他的scala object时需要重新配置一下VM options