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

  1. 和 有什么区别?SparkContext,JavaSparkContext,SQLContextSparkSession
  2. 有没有办法使用 转换或创建上下文 ?SparkSession
  3. 我可以使用一个条目完全替换所有上下文吗?SparkSession
  4. 和 中的所有函数是否都在 ?SQLContextSparkContextJavaSparkContextSparkSession
  5. 某些函数(如 )在 和 中具有不同的行为。他们如何表现?parallelizeSparkContextJavaSparkContextSparkSession
  6. 如何使用 ?SparkSession

    • RDD
    • JavaRDD
    • JavaPairRDD
    • Dataset

有没有一种方法可以将 a 转换为 a 或 a 转换为 ?JavaPairRDDDatasetDatasetJavaPairRDD


答案 1

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

SQLContext是 SparkSQL 的入口点,可以从 接收。在2.x.x之前,RDD、DataFrame和Data-set是三种不同的数据抽象。从Spark 2.x.x开始,所有三个数据抽象都是统一的,并且是Spark的统一入口点。sparkContextSparkSession

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

有没有办法使用Sparksession转换或创建上下文?

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

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

是的。您可以从sparkSession获得相应的contexs。

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

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

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

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

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

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

答案 2

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

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

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

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

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

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

从Spark 2.0开始,它被[[SparkSession]]所取代。但是,我们保留此处的类是为了向后兼容。

SparkSession:使用数据集和 DataFrame API 对 Spark 进行编程的入口点。


推荐