Spark — SparkContext¶
SparkContext在Spark 1.x版本引入,在Spark 2.0引入SparkSession之前,它是Spark应用程序的切入点。
SparkContext介绍¶
在Spark 1.x版本之后,SparkContext就成为Spark应用程序的切入点。
它定义在 org.apache.Spark 包中,用来在集群上创建RDD、累加器、广播变量。
每个JVM里只能存在一个处于active状态的SparkContext,在创建新的SparkContext之前必须调用 stop() 来关闭之前的SparkContext。
每一个Spark应用都是一个SparkContext实例,可以理解为一个SparkContext就是一个Spark应用的生命周期, 一旦SparkContext创建之后,就可以用这个SparkContext来创建RDD、累加器、广播变量。
spark-shell中使用¶
Spark Shell默认提供了一个名为 sc 的SparkContext类的实例对象,我们可以在spark-shell中直接使用此对象。
scala> val rdd = sc.textFile("D:\\Code\\Scala\\word.txt")
SparkContext创建(1.X)¶
在Scala中编写Spark应用程序需要先创建 SparkConf 实例,然后将SparkConf对象作为参数传递给 SparkContext 构造函数来创建SparkContext。
val sparkConf = new SparkConf()
.setAppName("SparkExample")
.setMaster("local[1]")
val sc = new SparkContext(sparkConf)
也可以使用 getOrCreate() 方法创建SparkContext。此函数用于获取或实例化SparkContext,并将其注册为单例对象。
val sc = SparkContext.getOrCreate(sparkConf)
SparkContext创建(2.X之后)¶
Spark 2.0之后,我们主要使用SparkSession,SparkSession中包含了SparkContext中大多数的API,Spark session在内部创建Spark Context并作为变量SparkContext来使用。
val sparkContext = spark.sparkContext
SparkContext常用方法¶
*Accumulator():创建累加器变量。Spark内置了三种类型的Accumulator,分别是longAccumulator用来累加整数型,doubleAccumulator用来累加浮点型,collectionAccumulator用来累加集合元素applicationId:Spark应用的唯一标识appName:创建SparkContext时设置的AppNamebroadcast():向集群广播一个只读变量,广播变量只会被发到各个节点一次emptyRDD():创建一个空RDDgetPersistentRDDs:返回所有持久化的RDD(cache())getOrCreate():创建或返回SparkContexthadoopFile():根据Hadoop文件创建RDDmaster:创建SparkContext时设置的masternewAPIHadoopFile():使用新的API InputFormat为Hadoop文件创建RDDsequenceFile():创建具有指定键和值类型的Hadoop SequenceFile的RDDsetLogLevel():设置日志级别textFile():从HDFS、本地或任何Hadoop文件系统读取文本文件,返回RDDunion():Union两个RDDwholeTextFiles():从HDFS、本地或任何Hadoop的文件系统读取文件夹中的文本文件,并返回Tuple2的RDD。元组的第一个元素为文件名,第二个元素为文件内容。