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

时间:2017-05-05 10:37:24

标签: java apache-spark dataset rdd apache-spark-dataset

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

    • RDD
    • JavaRDD
    • JavaPairRDD
    • Dataset
  7. 是否有方法将JavaPairRDD转换为DatasetDataset转换为JavaPairRDD

5 个答案:

答案 0 :(得分:24)

sparkContext是Scala实现入口点,JavaSparkContextsparkContext的java包装器。

SQLContext是SparkSQL的入口点,可以从sparkContext接收。在2.xx之前,RDD,DataFrame和数据集是三种不同的数据抽象。自Spark 2.xx,All三个数据抽象是统一的,SparkSession是Spark的统一入口点。

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

  

有没有使用Sparksession转换或创建Context的方法?

是肯定的。其sparkSession.sparkContext()和SQL sparkSession.sqlContext()

  

我可以使用一个条目SparkSession完全替换所有Context吗?

是肯定的。你可以从sparkSession获得相应的上下文。

  

是否在SparkSession中添加了SQLContext,SparkContext,JavaSparkContext等中的所有函数?

不直接。你必须得到各自的背景并使用它。像向后兼容性

  

如何在SparkSession中使用这样的功能?

获取相应的上下文并使用它。

  

如何使用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. 如果数据集是结构化数据,则数据集会返回sparkSession。

答案 1 :(得分:8)

branch-2.1

下的spark源代码说明

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

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

<强> JavaSparkContext:   返回的[[org.apache.spark.SparkContext]]的Java友好版本   [[org.apache.spark.api.java.JavaRDD]]和Java集合而不是Scala集合。

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

<强> SQLContext:   在Spark 1.x中使用结构化数据(行和列)的入口点。

从Spark 2.0开始,它被[[SparkSession]]取代。但是,我们正在上课   这里是为了向后兼容。

<强> SparkSession:   使用Dataset和DataFrame API编程Spark的切入点。

答案 2 :(得分:2)

我只会谈论 Spark 2.x

SparkSession::这是您的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 APISparkContext进行交互,您可以创建RDDaccumlatorBroadcast variables

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

获取SparkSession
val sc = spark.sparkContext

答案 3 :(得分:1)

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

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

Spark Session这是自Spark 2.x 以来添加的新对象,它取代了Sql Context和Hive Context。 之前我们有两个选项,比如一个是Sql Context,它是在Dataframe上进行sql操作的方法,第二个是Hive Context,它管理与Hive连接相关的东西,并从hive表中获取/插入数据。

从2.x开始我们可以为Dataframe上的SQL操作创建SparkSession,如果你有任何与Hive相关的工作,只需调用Method enablehivesupport(),然后就可以将SparkSession用于Dataframe和hive相关的SQL操作。

这样我们就可以在Dataframe上为Sql操作创建SparkSession

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

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

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

答案 4 :(得分:0)

Spark 上下文:

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

SparkContext 是 spark 执行环境的客户端。 SparkContext 是 spark 执行作业的入口点。 SparkContext 充当 Spark 应用程序的主人。

希望您会发现此 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 来处理数据集和数据帧。 在 Spark2.0 之前:

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

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

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

JavaSparkContext For JAVARDD 与上述相同,但在 java 实现中。

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

相关问题