SparkContext.getOrCreate() 目的

SparkContext.getOrCreate() purpose

SparkContext class 中的 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 源代码中无处不在,传递它们将是一个巨大的负担。

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

关于docs

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。检查 Is there one JVM per Java application? and Why have one JVM per application? 相关的一般问题)。应用程序指的是 "logical application",其中多个模块执行自己的代码 - 一个示例是 spark-jobserver 上的 SparkJob。这种情况与将 SparkContext 传递给函数没有什么不同。