关于SparkSession
任何Spark程序的第一步都是先创建SparkSession。在Spark-Shell或者其他交互模式中,SparkSession已经预先被创建好了,但在正常编写的Spark程序中,我们必须手动创建SparkSession。
在一些遗留的Spark代码中,我们一般使用 new SparkContext 这种模式。但在新的Spark版本中,我们应该避免使用这种模式,尽量使用SparkSession,因为它可以更健壮地实例化Spark和SQL Contexts,并确保没有Context冲突。我们可以通过以下方法在Spark程序中创建session:
//Creating a SparkSession in Scala
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().appName("Databricks Spark Example")
.config("spark.sql.warehouse.dir", "/user/hive/warehouse")
.getOrCreate()
# Creating a SparkSession in Python
from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local").appName("Word Count")\
.config("spark.some.config.option", "some-value")\
.getOrCreate()
在我们创建SparkSession之后,我们就能运行我们的Spark 代码了。通过SparkSession,我们能使用Spark中原有的低级API、遗留的Contexts和配置等。
SparkSession仅存在于Spark 2.X 中,对于较旧的版本,我们则需要直接创建 SparkContext 和 SQLContext
SparkSession中的SparkContext对象可以告诉Spark程序如何连接访问Spark集群。 我们可以通过它在Spark中使用一些较低级API,例如创建一个RDD,累加器和广播变量等。 在旧版的文档或者例子中,我们通常使用变量 ==sc== 来表示SparkContext。
在大多数情况下,我们不需要显式初始化SparkContext; 而尽量通过SparkSession来访问它。 如果需要,我们应该通过getOrCreate的方式创建它:
//in Scala
import org.apache.spark.SparkContext
val sc = SparkContext.getOrCreate()
在以前版本的Spark中,SQLContext和HiveContext提供了使用DataFrames和Spark SQL的接口,并且通常作为变量sqlContext存储在示例,文档和遗留代码中。
Spark 1.X实际上有两个Context, SparkContext和SQLContext,它们负责不同的功能。 前者专注于对Spark的中心抽象进行更细粒度的控制,而后者则专注于Spark SQL等更高级别的API。
在Spark 2.X中,这两个API被集成到SparkSession中。 但是,这两个API仍然存在。但需要注意,请尽可能的直接使用SQLContext和SparkContext,而通过SparkSession访问它们
网友评论