Spark笔记-玩转SparkSession

关于SparkConf和SparkContext

1、每个Spark应用程序都需要一个Spark环境,这是Spark RDD API的主要入口点。Spark Shell提供了一个名为“sc”的预配置Spark环境和一个名为“spark”的预配置Spark会话;

2、任何Spark程序都是SparkContext开始的(SparkContext是允许驱动程序【spark drive】通过资源管理器访问集群);

3、SparkContext的初始化需要一个SparkConf对象,SparkConf包含了Spark集群配置的各种参数;

4、初始化后,就可以使用SparkContext对象所包含的各种方法来创建和操作RDD和共享变量。一旦设置完成SparkConf,就不可被使用者修改。

Scala写法:

1
2
3
4
5
val conf = new SparkConf().setMaster("master").setAppName("appName")
val sc = new SparkContext(conf)

// 或者
val sc = new SparkContext("master","appName")

Python写法:

1
2
3
4
5
6
7
8
from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster('local').setAppName('My App')
sc = SparkContext(conf = conf)
sc.stop()

# 或者
sc = SparkContext('local', 'My APP')
sc.stop()

SQLContext 是什么?

SQLContext是通往SparkSQL的入口。下面是如何使用SparkContext创建SQLContext。

1
2
// sc is an existing SparkContext.
val sqlContext = new org.apache.spark.sql.SQLContext(sc)

一旦有了SQLContext,就可以开始处理DataFrame、DataSet等。

HiveContext 是什么?

HiveContext是通往hive入口。
HiveContext具有SQLContext的所有功能。
实际上,如果查看API文档,就会发现HiveContext扩展了SQLContext,这意味着它支持SQLContext支持的功能以及更多(Hive特定的功能)。

1
public class HiveContext extends SQLContext implements Logging

下面是如何使用SparkContext获得HiveContext。

1
2
// sc is an existing SparkContext.
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)

SparkSession

SparkSession实质上是SQLContext和HiveContext的组合(未来可能还会加上StreamingContext),所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。

SparkSession的简单示例

SparkSession内部封装了SparkContext,所以计算实际上是由SparkContext完成的。

1
2
3
4
5
val sparkSession = SparkSession.builder
.master("master")
.appName("appName")
.getOrCreate()
//或者SparkSession.builder.config(conf=SparkConf())

上面代码类似于创建一个SparkContext,master设置为”master”,然后创建了一个SQLContext封装它。

创建支持Hive的SparkSession

如果你想创建hiveContext,可以使用下面的方法来创建SparkSession,以使得它支持Hive(HiveContext):

1
2
3
4
5
6
7
val sparkSession = SparkSession.builder
.master("master")
.appName("appName")
.enableHiveSupport()
.getOrCreate()
//sparkSession 从csv读取数据:
val dq = sparkSession.read.option("header", "true").csv("src/main/resources/scala.csv")

上面代码中的getOrCreate()方法表示有就拿过来,没有就创建,类似于单例模式:

1
2
3
val s1 = SparkSession().builder.config("k1", "v1").getOrCreat()
val s2 = SparkSession().builder.config("k2", "v2").getOrCreat()
return s1.conf.get("k1") == s2.conf.get("k2")

上面代码类似于创建一个SparkContext,master设置为”master”,然后创建了一个SQLContext封装它。

Reference:

1、SparkSession、SparkContext、SQLContext和HiveContext之间的区别。

2、SparkConf和SparkContext

------ 本文结束------
Donate comment here.

欢迎关注我的其它发布渠道