Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark SparkContext.getOrCreate()用途_Apache Spark_Pyspark_Apache Spark Sql_Spark Dataframe_Spark Streaming - Fatal编程技术网

Apache spark SparkContext.getOrCreate()用途

Apache spark SparkContext.getOrCreate()用途,apache-spark,pyspark,apache-spark-sql,spark-dataframe,spark-streaming,Apache Spark,Pyspark,Apache Spark Sql,Spark Dataframe,Spark Streaming,从SparkContext类中获取或创建方法的目的是什么?我不明白我们什么时候应该用这种方法 如果我有两个spark应用程序是使用spark submit运行的,并且在main方法中我使用SparkContext.getOrCreate实例化spark上下文,那么这两个应用程序将具有相同的上下文 或者目的更简单,唯一的目的是当我创建一个spark应用程序时,我不想将spark上下文作为参数发送给一个方法,我会将它作为一个单例对象来获取 如果我有两个spark应用程序使用spark submit运

SparkContext
类中获取或创建
方法的目的是什么?我不明白我们什么时候应该用这种方法

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

或者目的更简单,唯一的目的是当我创建一个spark应用程序时,我不想将spark上下文作为参数发送给一个方法,我会将它作为一个单例对象来获取

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

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

当我创建一个spark应用程序时,我不想将spark上下文作为参数发送给一个方法,我会将它作为一个单例对象来获取

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

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

关于:

is函数可用于获取或实例化SparkContext,并将其注册为singleton对象。因为每个JVM只能有一个活动的SparkContext,所以当应用程序希望共享一个SparkContext时,这非常有用


驱动程序在其自己的JVM中运行,并且没有内置的机制在多个成熟的Java应用程序之间共享它(适当的应用程序执行其自己的
main
。检查并了解相关的一般问题)。应用程序指的是多个模块执行其自身代码的“逻辑应用程序”-例如
SparkJob
上的
SparkJob
。此场景与将
SparkContext
传递给函数没有什么不同

根据文件,你的第一点是不正确的:@Jeremy,这不正确。在正常情况下,每个JVM只能有一个应用程序(Spark应用程序或不是),我是在回应您的陈述,“它不是在应用程序之间共享的”。使用getOrCreate()共享SparkContext。如果SparkContext不存在,它将创建SparkContext;如果已经存在,它将获取SparkContext的实例。下面是@Jeremy的相关描述,您不能在应用程序中共享上下文(严格意义上)也不能共享JVM。你们所指的是在应用程序内部共享上下文。我有你们两个正在谈论的相同问题。我认为文档中的“应用程序”一词用错了。因为,如果spark上下文在多个应用程序之间共享,那么如果其中一个应用程序决定自行关闭,那么所有应用程序都将关闭,因为它们具有相同的sparkcontext。另一方面,spark在实例化相同的上下文(使用现有的SparkContext,某些配置可能不会生效)时编写的日志非常混乱,因为如果我使用该方法只是不将对象作为参数发送,这是没有意义的。