SparkContext、JavaSparkContext、SQLContext 和 SparkSession 之间的区别?

Difference between SparkContext, JavaSparkContext, SQLContext, and SparkSession?

  1. SparkContext,JavaSparkContext,SQLContextSparkSession有什么区别?
  2. 是否有任何方法可以使用 SparkSession 转换或创建上下文?
  3. 我可以使用一个条目完全替换所有上下文吗SparkSession
  4. SQLContextSparkContextJavaSparkContext中的所有函数是否也在SparkSession中?
  5. parallelize 等一些函数在 SparkContextJavaSparkContext 中有不同的行为。他们在 SparkSession 中的表现如何?
  6. 如何使用 SparkSession 创建以下内容?

    • RDD
    • JavaRDD
    • JavaPairRDD
    • Dataset

有没有一种方法可以将 JavaPairRDD 转换为 Dataset 或将 Dataset 转换为 JavaPairRDD

来自branch-2.1下spark源码的解释

SparkContext: Spark 功能的主要入口点。 SparkContext 表示与 Spark 的连接 集群,并可用于在该集群上创建 RDD、累加器和广播变量。

每个 JVM 只能激活一个 SparkContext。您必须先 stop() 活动的 SparkContext 创建一个新的。这个限制最终可能会被取消;有关详细信息,请参阅 SPARK-2243。

JavaSparkContext: Java 友好版本的 [[org.apache.spark.SparkContext]] returns [[org.apache.spark.api.java.JavaRDD]]s 并使用 Java 集合而不是 Scala 集合。

每个 JVM 只能激活一个 SparkContext。您必须先 stop() 活动的 SparkContext 创建一个新的。这个限制最终可能会被取消;有关详细信息,请参阅 SPARK-2243。

SQLContext: 在 Spark 1.x.

中处理结构化数据(行和列)的入口点

从 Spark 2.0 开始,它被 [[SparkSession]] 取代。但是,我们保留 class 这里是为了向后兼容。

SparkSession: 使用 Dataset 和 DataFrame API.

对 Spark 进行编程的入口点

sparkContext 是 Scala 实现入口点,JavaSparkContextsparkContext.

的 java 包装器

SQLContext是SparkSQL的入口点,可以从sparkContext接收。在2.x.x之前,RDD、DataFrame和Data-set是三种不同的数据abstractions.Since Spark 2.x.x,三种数据抽象统一,SparkSession是Spark的统一入口

另外需要注意的是,RDD 用于非结构化数据、强类型数据,DataFrames 用于结构化和松散类型数据。你可以

Is there any method to convert or create Context using Sparksession ?

是的。它的 sparkSession.sparkContext() 和 SQL、sparkSession.sqlContext()

Can I completely replace all the Context using one single entry SparkSession ?

是的。您可以从 sparkSession.

获取相应的上下文

Does all the functions in SQLContext, SparkContext,JavaSparkContext etc are added in SparkSession?

不直接。您必须获得各自的上下文并利用 it.something 之类的向后兼容性

How to use such function in SparkSession?

获取各​​自的上下文并加以利用。

How to create the following using SparkSession?

  1. 可以从 sparkSession.sparkContext.parallelize(???)
  2. 创建 RDD
  3. JavaRDD 同样适用于此,但在 java 实现中
  4. JavaPairRDD sparkSession.sparkContext.parallelize(???).map(//making your data as key-value pair here is one way)
  5. Dataset 如果是结构化数据,sparkSession returns 是什么Dataset。

Spark Context 是 Spark API 中的 Class,这是构建 spark 应用程序的第一阶段。 spark 上下文的功能是在 RAM 中创建内存,我们称之为驱动程序内存,执行器和内核数量的分配简而言之就是集群管理。 Spark Context 可用于创建 RDD 和共享变量。要访问它,我们需要创建它的对象。

这样我们就可以创建 Spark Context :: var sc=new SparkContext()

Spark Session 这是自 spark 2.x 以来添加的新对象,它替代了 Sql 上下文和 Hive 上下文。 早些时候我们有两个选项,一个是 Sql 上下文,这是对 Dataframe 进行 sql 操作的方法,第二个是 Hive 上下文,它管理 Hive 连接相关的东西和 fetch/insert 数据 from/to 配置单元表。

自从 2.x 出现以来,我们可以为 Dataframe 上的 SQL 操作创建 SparkSession,如果您有任何与 Hive 相关的工作,只需调用方法 enablehivesupport() 然后您就可以为两者使用 SparkSession Dataframe 和 hive 相关的 SQL 操作。

这样我们就可以为 Dataframe

上的 Sql 操作创建 SparkSession

val sparksession=SparkSession.builder().getOrCreate();

第二种方法是为 Sql Dataframe 操作和 Hive 操作创建 SparkSession。

val sparkSession=SparkSession.builder().enableHiveSupport().getOrCreate()

我只说Spark版本2.x

SparkSession: 它是您的 spark 应用程序的主要入口点。对于 运行 你的 spark 上的任何代码,这是你应该创建的第一件事。

from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local").appName("Word Count")\
.config("spark.some.config.option", "some-value")\
.getOrCreate()

SparkContext: 它是 SparkSession 的内部对象 (属性)。它用于与 Low-Level API 交互 通过 SparkContext 您可以创建 RDDaccumlatorBroadcast variables

在大多数情况下,您不需要 SparkContext。你可以从 SparkSession

得到 SparkContext
val sc = spark.sparkContext

Spark 上下文:

自从 Spark 1.x 以来,Spark SparkContext 是 Spark 的入口点并在 org.阿帕奇。 spark 包,用于以编程方式在集群上创建 Spark RDD、累加器和广播变量。它的对象 sc 是 spark-shell 中可用的默认变量,它可以使用 SparkContext class.

以编程方式创建

SparkContext是spark执行环境的客户端。 SparkContext 是 spark 执行作业的入口点。 SparkContext作为spark应用的master。

希望您会发现这个 Apache SparkContext Examples 网站有用。

SparkSession:

从Spark 2.0开始,SparkSession成为Spark与RDD、DataFrame、Dataset协同工作的入口。在 2.0 之前,SparkContext 曾经是一个入口点。在这里,我将主要通过定义和描述如何创建 Spark Session 以及使用来自 spark-shell.

的默认 Spark Session ‘spark’ 变量来解释什么是 SparkSession。

Apache spark2.0以后,spark session是spark应用的新入口。 Spark 上下文提供的所有功能都可以在 Spark 会话中使用。 spark session 提供 API(s) 来处理数据集和数据帧。 Spark2.0之前:

Spark 上下文是 Spark 作业的入口点。 RDD 是当时主要的 API 之一,它是使用 spark Context 创建和操作的。 对于其他 API,需要不同的上下文 - 对于 SQL,需要 SQL 上下文。

您可以在 Apache SparkSession 上找到更多实时示例。

SQL上下文: 在 Spark 版本 1.0 中,SQLContext (org.apache.spark.sql.SQLContext ) 是 SQL 的入口点,以便处理结构化数据(行和列),但是 2.0 SQLContext 已被替换为 SparkSession。 Apache Spark SQLContext 是 SparkSQL 的入口点,SparkSQL 是 Spark 1.x 中用于结构化数据(行和列)的 Spark 模块。加工。 Spark SQL上下文已初始化。 apache-spark SQL context 是 Spark SQL 的入口点,可以从 spark context 接收 JavaSparkContext:

JavaJAVARDD 的 SparkContext 与上面相同,但在 java 实现中。

JavaSparkContext Java 的 [[org.apache.spark.SparkContext]] 友好版本 returns [[org.apache.spark.api.java.JavaRDD]] 并与 Java 集合而不是 Scala 集合。