目的是什么getOrCreate
方法来自SparkContext
班级?我不明白什么时候应该使用这个方法。
如果我有 2 个 Spark 应用程序运行spark-submit
,在主要方法中,我用以下方法实例化 Spark 上下文SparkContext.getOrCreate
,两个应用程序将具有相同的上下文?
或者目的更简单,唯一的目的是当我创建一个spark应用程序时,我不想将spark上下文作为参数发送给方法,而我将其作为单例对象获取?
如果我有 2 个使用 Spark-submit 运行的 Spark 应用程序,并且在 main 方法中我使用 SparkContext.getOrCreate 实例化 Spark 上下文,那么两个应用程序将具有相同的上下文吗?
不,SparkContext 是一个本地对象。它不在应用程序之间共享。
当我创建 Spark 应用程序时,我不想将 Spark 上下文作为参数发送给方法,并且我会将其作为单例对象获取?
正是这个原因。SparkContext
(or SparkSession
)在 Spark 应用程序和核心 Spark 源代码中无处不在,传递它们将是一个巨大的负担。
它对于任意线程可以初始化上下文的多线程应用程序也很有用。
About docs https://spark.apache.org/docs/latest/api/java/org/apache/spark/SparkContext.html#getOrCreate-org.apache.spark.SparkConf-:
is 函数可用于获取或实例化 SparkContext 并将其注册为单例对象。因为每个 JVM 只能有一个活动 SparkContext,所以当应用程序可能希望共享 SparkContext 时,这非常有用。
驱动程序在其自己的 JVM 中运行,并且没有内置机制可以在多个成熟的 Java 应用程序之间共享它(正确的应用程序执行自己的main
. Check 每个 Java 应用程序是否有一个 JVM? https://stackoverflow.com/q/5947207/8371915 and 为什么每个应用程序有一个 JVM? https://stackoverflow.com/q/13539132/8371915相关的一般问题)。应用程序是指“逻辑应用程序”,其中多个模块执行自己的代码 - 一个例子是SparkJob
on spark-jobserver
。这个场景和通过没有什么区别SparkContext
到一个函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)