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
传递给函数没有什么不同。
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
传递给函数没有什么不同。