SparkContext.getOrCreate()的目的

时间:2017-12-14 12:41:21

标签: apache-spark pyspark apache-spark-sql spark-dataframe spark-streaming

来自getOrCreate课程的SparkContext方法的目的是什么?我不明白何时应该使用这种方法。

如果我有2个使用spark-submit运行的spark应用程序,并且在main方法中我使用SparkContext.getOrCreate实例化spark上下文,那么这两个应用程序将具有相同的上下文?

或者目的更简单,唯一的目的是当我创建一个spark应用程序时,我不想将spark上下文作为参数发送给方法,我将把它作为一个单例对象?

1 个答案:

答案 0 :(得分:1)

  

如果我有两个使用spark-submit运行的spark应用程序,并且在main方法中我使用SparkContext.getOrCreate实例化spark上下文,那么这两个应用程序将具有相同的上下文?

不,SparkContext是一个本地对象。它不在应用程序之间共享。

  

当我创建一个spark应用程序时,我不想将spark上下文作为参数发送给方法,我会将其作为单例对象获取?

这正是原因所在。 SparkContext(或SparkSession)在Spark应用程序和Spark的核心源代码中无处不在,传递它们会带来巨大的负担。

对于任意线程可以初始化上下文的多线程应用程序也很有用。

关于docs

  

is function可用于获取或实例化SparkContext并将其注册为单例对象。因为每个JVM只能有一个活动的SparkContext,所以当应用程序可能希望共享SparkContext时,这很有用。

驱动程序在自己的JVM中运行,没有内置机制可以在多个成熟的Java应用程序之间共享它(正确的应用程序执行自己的main。检查Is there one JVM per Java application?和{{3}相关的一般问题)。应用程序是指"逻辑应用程序"多个模块执行自己的代码的地方 - SparkJob上的一个例子是spark-jobserver。此方案与将SparkContext传递给函数没有什么不同。