SparkStreaming的数据是DStream的形式,本质上是RDD类型数据,而SparkSql则是DataFrame的数据类型,所以要使用DataFrame,就需要创建SparkSession会话。SparkStreaming和SparkSession的创建都会用到SparkConf,为了一致性,所以两者需要公用一个SparkConf。
一、创建一个SparkSession的单例对象文件
package com.cjs
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
object SparkSessionSingleton {
@transient private var instance:SparkSession = _
def getInstance(conf:SparkConf)={
if (instance==null) {
instance = SparkSession
.builder()
.config(conf)
.getOrCreate()
}
instance
}
}
Spark程序中,一个Application不允许多个active SparkContext,SparkContext只会在Driver中得main函数中声明并初始化, 也就是说只会在Driver所在节点的一个进程内构造,从而保证getInstance获取的是同一个SparkSession。
二、应用程序文件
下面Application是进行wordCount操作: