SparkContext,
JavaSparkContext,
SQLContext
和SparkSession
之间的区别是什么?SparkSession
转换或创建上下文?SparkSession
完全替换所有上下文吗?SQLContext
,SparkContext
和JavaSparkContext
中的所有功能是否也在SparkSession
?parallelize
在SparkContext
和JavaSparkContext
中有不同的行为。他们在SparkSession
中的表现如何?如何使用SparkSession
创建以下内容?
RDD
JavaRDD
JavaPairRDD
Dataset
是否有方法将JavaPairRDD
转换为Dataset
或Dataset
转换为JavaPairRDD
?
答案 0 :(得分:24)
sparkContext
是Scala实现入口点,JavaSparkContext
是sparkContext
的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创建以下内容?
sparkSession.sparkContext.parallelize(???)
sparkSession.sparkContext.parallelize(???).map(//making your data as key-value pair here is one way)
答案 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 API
与SparkContext
进行交互,您可以创建RDD
,accumlator
和Broadcast 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 集合。>