Spark — SparkSession¶
Apache Spark 2.0引入了 SparkSession ,它为用户提供了一个统一的切入点来使用Spark的各项功能,
并且允许用户通过它调用DataFrame和Dataset相关API来编写Spark程序。最重要的是,它减少了用户需要了解的一些概念,使得用户可以很容易地与Spark交互。
SparkSession介绍¶
Spark 2.0引入了一个新类 org.apache.Spark.sql.SparkSession ,它内部封装了我们在2.0之前版本中
使用的所有上下文的组合类( SQLContext 和 HiveContext 等等),使用起来更加方便。
正如前面所讲,SparkSession是Spark程序的切入点,所有Spark程序都应以创建SparkSession实例开始。
使用 SparkSession.builder() 创建SparkSession。
SparkSession包括了以下上下文接口:
Spark Context
SQL Context
Streaming Context
Hive Context
spark-shell中使用¶
Spark Shell默认提供了一个名为 spark 的SparkSession类的实例对象,我们可以在spark-shell中直接使用此对象。
scala> val sqlContext = spark.sqlContext
SparkSession创建¶
在Scala中创建SparkSession,需要使用生成器方法 builder() 然后调用 getOrCreate()方法。
如果SparkSession已经存在它将直接返回,否则将创建一个新的SparkSession:
val spark = SparkSession.builder()
.master("local[1]")
.appName("SparkExamples")
.config("spark.sql.execution.arrow.enabled", "true")
.getOrCreate();
master:设置运行方式。
local代表本机运行,local[4]代表在本机分配4核运行。如果要在集群上运行,通常它可能是yarn或mesos, 这取决于你的集群配置;appName:设置spark应用程序的名字,可以在web UI界面看到;
config:额外配置项;
getOrCreate:如果已经存在,则返回SparkSession对象;如果不存在,则创建新对象。
SparkSession常用方法¶
version:运行应用程序的Spark版本,或者是群集配置的Spark版本builder():用来创建SparkSession实例,它返回SparkSession.BuildercreateDataFrame():将RDD、Seq、java.util.List转换为DataFramecreateDataset():将RDD、Seq、java.util.List转换为DatasetemptyDataFrame():创建一个空的DataFrameemptyDataset():创建一个空的DatasetgetActiveSession:返回当前线程活跃的SparkSessionimplicits:常用Scala对象转换为DataFrame的隐式转换read(): 用于将csv、parquet、avro和其他文件格式的内容读取到DataFrame中, 它返回DataFrameReader实例readStream():和read方法类似,不同的是它被用于读取流式数据sparkContext:返回SparkContextsql():执行SQL语句返回DataFrame数据sqlContext:返回SQLContextstop():停止当前SparkContexttable():返回DataFrame中的表或者视图udf():创建Spark UDF(User Defined Functions)