Spark WordCount 源码解析
学习Spark有一段时间了,现在只处于会用的阶段,对内部代码和原理不怎么熟悉,乘着这几天有时间,解读一下源码,同时也熟悉一下scala语言
环境:
Spark 2.1.0
IntelliJ IDEA 15.0.2
Scala 2.10.4
废话不说,先上完整代码:
然后我们开始逐条代码分析:
if (args.length < 1) {
System.err.println("Usage: JavaWordCount <file>");
System.exit(1);
}
因为我们的程序是计算单词的个数,所以需要有个单词源,即输入文件。所以在程序的开始先判断一下是否有输入目录,如果没有文件目录输入,程序打印错误日志,直接退出。如果输入正常,程序向下执行。
SparkSession spark = SparkSession
.builder()
.appName("JavaWordCount")
.getOrCreate();
在spark2.0之后,引入了SparkSession这个类,SparkSession中包含SparkConf、SparkContext、SQLContext,再使用Spark的API时只需要创建一个SparkSession就可以了。
进入SparkSession中的getOrCreate()方法:
首先先获取一个SparkSession,这个SparkSession可以为null
var session = activeThreadSession.get()
我们先看一下activeThreadSession的声明
private val activeThreadSession = new InheritableThreadLocal[SparkSession]
InheritableThreadLocal 是 ThreadLocal的子类,是用来实现变量的线程安全的
获取SparkSession之后,