关于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 | val conf = new SparkConf().setMaster("master").setAppName("appName") |
Python写法:
1 | from pyspark import SparkConf, SparkContext |
SQLContext 是什么?
SQLContext是通往SparkSQL的入口。下面是如何使用SparkContext创建SQLContext。
1 | // sc is an existing SparkContext. |
一旦有了SQLContext,就可以开始处理DataFrame、DataSet等。
HiveContext 是什么?
HiveContext是通往hive入口。
HiveContext具有SQLContext的所有功能。
实际上,如果查看API文档,就会发现HiveContext扩展了SQLContext,这意味着它支持SQLContext支持的功能以及更多(Hive特定的功能)。
1 | public class HiveContext extends SQLContext implements Logging |
下面是如何使用SparkContext获得HiveContext。
1 | // sc is an existing SparkContext. |
SparkSession
SparkSession实质上是SQLContext和HiveContext的组合(未来可能还会加上StreamingContext),所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。
SparkSession的简单示例
SparkSession内部封装了SparkContext,所以计算实际上是由SparkContext完成的。
1 | val sparkSession = SparkSession.builder |
上面代码类似于创建一个SparkContext,master设置为”master”,然后创建了一个SQLContext封装它。
创建支持Hive的SparkSession
如果你想创建hiveContext,可以使用下面的方法来创建SparkSession,以使得它支持Hive(HiveContext):
1 | val sparkSession = SparkSession.builder |
上面代码中的getOrCreate()方法表示有就拿过来,没有就创建,类似于单例模式:
1 | val s1 = SparkSession().builder.config("k1", "v1").getOrCreat() |
上面代码类似于创建一个SparkContext,master设置为”master”,然后创建了一个SQLContext封装它。
Reference: