SparkContext
类中getOrCreate
方法的目的是什么?我不明白何时应该使用此方法。
如果我有2个使用spark-submit
运行的SPARK应用程序,并且在主要方法中,我用SparkContext.getOrCreate
实例化了Spark上下文,则两个应用程序都具有相同的上下文?
或目的更简单,唯一的目的是当我创建一个Spark应用程序时,我不想将Spark上下文作为参数发送到方法,而我会将其作为单身对象?<</p>
如果我有2个使用Spark-Submit运行的Spark应用程序,并且在主要方法中,我使用SparkContext.GetorCreate实例化了Spark上下文,则两个应用程序都具有相同的上下文?
不,SparkContext是本地对象。它在应用程序之间没有共享。
当我创建一个Spark应用程序时,我不想将Spark上下文作为参数发送到方法,而我会将其作为单身对象?
这正是原因。SparkContext
(或SparkSession
)在Spark应用程序和Core Spark的来源中无处不在,并且将它们传递到巨大的负担。
它对于任意线程可能使上下文捕捉的多线程应用程序也很有用。
关于文档:
IS函数可用于获取或实例化SparkContext并将其注册为单例对象。因为我们每JVM只能有一个活动SparkContext,所以当应用程序可能希望共享SparkContext时,这很有用。
驱动程序以自己的JVM运行,并且没有内置机制可以在多个成熟的Java应用程序之间共享(正确执行其自己的main
。适用于相关的一般问题)。应用程序是指"逻辑应用程序",其中多个模块执行其自己的代码 - 一个示例是spark-jobserver
上的SparkJob
。这种情况与将SparkContext
传递给函数没有什么不同。