【问题标题】:Difference between SparkContext, JavaSparkContext, SQLContext, and SparkSession?SparkContext、JavaSparkContext、SQLContext和SparkSession的区别?
【发布时间】:2017-10-03 19:25:34
【问题描述】:
  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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    有什么方法可以使用 Sparksession 转换或创建 Context 吗?

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

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

    是的。您可以从 sparkSession 获取相应的上下文。

    SQLContext、SparkContext、JavaSparkContext等中的所有函数都添加到SparkSession中了吗?

    不直接。你必须获得相应的上下文并利用它。类似于向后兼容性

    如何在 SparkSession 中使用该功能?

    获取相应的上下文并加以利用。

    如何使用 SparkSession 创建以下内容?

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

    【讨论】:

      【解决方案2】:

      来自分支2.1下spark源码的解释

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

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

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

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

      SQLContext: 在 Spark 1.x 中处理结构化数据(行和列)的入口点。

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

      SparkSession: 使用 Dataset 和 DataFrame API 编程 Spark 的入口点。

      【讨论】:

      • 我们为什么以及在哪里使用JavaSparkContext
      【解决方案3】:

      我将只讨论 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
      

      【讨论】:

        【解决方案4】:

        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 相关的工作,只需调用方法 enablehivesupport() 然后您可以将 SparkSession 用于 Dataframe 和 hive 相关的 SQL 操作。

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

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

        第二种方法是为Dataframe上的Sql操作以及Hive操作创建SparkSession。

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

        【讨论】:

          【解决方案5】:

          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 的入口点,它是 Spark 1.x 中结构化数据(行和列)的 Spark 模块。加工。 Spark SQLContext 已初始化。 apache-spark SQL 上下文是 Spark SQL 的入口点,可以从 spark 上下文中接收 JavaSparkContext:

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

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

          【讨论】:

            猜你喜欢
            • 2020-10-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-20
            • 2019-03-31
            • 2018-08-12
            • 1970-01-01
            相关资源
            最近更新 更多