这次讲如何在IntelliJ IDEA里启动Spark,需要安装Scala插件。
版本说明
- Scala: 2.12.8
- Spark: 2.4 (对应的Hadoop是2.7)
用sbt编译scala,其中build.sbt文件核心配置如下(选择自动下载文件)
scalaVersion := "2.12.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.0"
SparkSession
通过spark-shell控制台进入spark时,系统会自动建立spark context。但是在代码里需要自己建立spark context。
先通过SparkSession的builder建立一个Session。
val session = SparkSession.builder()
.master("local")
.appName("WordCount")
.getOrCreate()
Spark Context
然后通过Session建立一个Spark Context
val sc: SparkContext = session.sparkContext
这个sc就和通过控制台进入后的sc一样了。之后的代码就是一样的。
完整代码
import org.apache.spark.SparkContext
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.SparkSession._
object HelloWord {
def wordCountFromString(sc: SparkContext): Unit = {
val text = "hello world\nhello scala\nhello python"
val lines = text.split("\n")
val rdd = sc.parallelize(lines)
rdd.foreach(println)
val words = rdd.flatMap(_.split(" "))
val wordsWithCount = words.map(w => (w, 1))
val wordCounts = wordsWithCount.reduceByKey(_ + _)
wordCounts.foreach(println)
}
def main(args: Array[String]): Unit = {
val session = SparkSession.builder()
.master("local")
.appName("WordCount")
.getOrCreate()
val sc: SparkContext = session.sparkContext
wordCountFromString(sc)
sc.stop()
}
}