关于Apache Spark:SparkContext.getOrCreate()的目的

SparkContext.getOrCreate() purpose

SparkContext类中的getOrCreate方法的目的是什么? 我不知道何时应使用此方法。

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

还是目的更简单,唯一的目的是当我创建一个spark应用程序时,并且我不想将spark上下文作为参数发送给方法,而是将其作为单例对象来获得?


If I have 2 spark applications that are run with spark-submit, and in the main method I instantiate the spark context with SparkContext.getOrCreate, both app will have the same context?

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

when I create a spark app, and I don't want to send the spark context as a parameter to a method, and I will get it as a singleton object?

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

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

关于文档:

is function may be used to get or instantiate a SparkContext and register it as a singleton object. Because we can only have one active SparkContext per JVM, this is useful when applications may wish to share a SparkContext.

驱动程序在自己的JVM中运行,并且没有内置的机制可在多个成熟的Java应用程序之间共享它(正确的应用程序执行自己的main。检查每个Java应用程序是否有一个JVM?为什么每个应用程序都有一个JVM? ?有关一般性问题)。 应用程序是指"逻辑应用程序",其中多个模块执行自己的代码-一个示例是spark-jobserver上的SparkJob。 这种情况与将SparkContext传递给函数没有什么不同。