关于java:SparkContext,JavaSparkContext,SQLContext和SparkSession之间的区别?

Difference between SparkContext, JavaSparkContext, SQLContext, and SparkSession?

  • SparkContext, JavaSparkContext, SQLContextSparkSession有什么区别?
  • 是否有使用SparkSession转换或创建Context的方法?
  • 我可以使用一个条目SparkSession完全替换所有上下文吗?
  • SQLContextSparkContextJavaSparkContext中的所有功能是否也在SparkSession中?
  • 某些功能,例如parallelizeSparkContextJavaSparkContext中具有不同的行为。它们在SparkSession中的表现如何?
  • 如何使用SparkSession创建以下内容?

    • RDD
    • JavaRDD
    • JavaPairRDD
    • Dataset
  • 是否存在将JavaPairRDD转换为DatasetDataset转换为JavaPairRDD的方法?


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

    SQLContext是SparkSQL的入口点,可以从sparkContext接收。在2.xx之前,RDD,DataFrame和Data-set是三个不同的数据抽象。从Spark 2.xx开始,这三个数据抽象都是统一,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?

    不直接。您必须获得各自的上下文并加以利用。例如向后兼容性

    How to use such function in SparkSession?

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

    How to create the following using SparkSession?

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

  • branch-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]]并与Java集合(而非Scala集合)一起使用。

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

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

    从Spark 2.0开始,此内容已由[[SparkSession]]取代。但是,我们保持课程
    这里是为了向后兼容。

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


    我只会谈论Spark版本2.x。

    SparkSession:这是您的spark应用程序的主要入口点。要在您的火花上运行任何代码,这是您应该首先创建的。

    1
    2
    3
    4
    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

    1
    val sc = spark.sparkContext

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

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

    Spark会话,这是自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()