Python 重新启动Spark上下文

Python 重新启动Spark上下文,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我正在运行一个Jupyter-spark设置,我想用不同的输入参数对集群进行基准测试。为了确保enivorment保持不变,我正在尝试重置(重新启动)SparkContext,下面是一些伪代码: import os import shutil import pyspark temp_result_parquet = os.path.normpath('/home/spark_tmp_parquet') i = 0 while i < max_i: i += 1 if

我正在运行一个
Jupyter
-spark设置,我想用不同的输入参数对集群进行基准测试。为了确保enivorment保持不变,我正在尝试重置(重新启动)SparkContext,下面是一些伪代码:

import os
import shutil
import pyspark

temp_result_parquet = os.path.normpath('/home/spark_tmp_parquet')
i = 0 

while i < max_i:
    i += 1
    if os.path.exists(temp_result_parquet):
        shutil.rmtree(temp_result_parquet) # I know I could simply overwrite the parquet

    My_DF = do_something(i)
    My_DF.write.parquet(temp_result_parquet)

    sc.stop()
    time.sleep(10)
    sc = pyspark.SparkContext(master='spark://ip:here', appName='PySparkShell')
我尝试在不重新启动SparkContext的情况下运行代码,但这会导致内存问题。因此,为了在每次迭代之前一笔勾销,我正在尝试这样做。奇怪的结果是,
parquet
认为
SparkContext
失败了

长话短说,Spark(包括PySpark)不是为在一个应用程序中处理多个上下文而设计的。如果您对这个故事的JVM方面感兴趣,我建议您阅读SPARK-2243(已解决为无法修复)

PySpark中有许多设计决策反映了这一点,包括但不限于单例Py4J网关。实际上,一个应用程序中不能有多个SparkContext。SparkSession不仅绑定到SparkContext,而且还引入了它自己的问题,例如如果使用本地(独立)配置单元元存储,则处理该配置单元元存储。此外,还有一些函数使用SparkSession.builder.getor在内部创建,具体取决于您现在看到的行为。一个显著的例子是UDF注册。如果存在多个SQL上下文(例如RDD.toDF),其他函数可能会表现出意外行为

在我个人看来,多重语境不仅不受支持,而且违反了单一责任原则。您的业务逻辑不应该关心所有的设置、清理和配置细节

长话短说,Spark(包括PySpark)并非设计用于在单个应用程序中处理多个上下文。如果您对这个故事的JVM方面感兴趣,我建议您阅读SPARK-2243(已解决为无法修复)

PySpark中有许多设计决策反映了这一点,包括但不限于单例Py4J网关。实际上,一个应用程序中不能有多个SparkContext。SparkSession不仅绑定到SparkContext,而且还引入了它自己的问题,例如如果使用本地(独立)配置单元元存储,则处理该配置单元元存储。此外,还有一些函数使用SparkSession.builder.getor在内部创建,具体取决于您现在看到的行为。一个显著的例子是UDF注册。如果存在多个SQL上下文(例如RDD.toDF),其他函数可能会表现出意外行为

在我个人看来,多重语境不仅不受支持,而且违反了单一责任原则。您的业务逻辑不应该关心所有的设置、清理和配置细节


能否提供应用程序的完整日志
纱线日志-applicationId application\u XXX
我没有使用纱线启动群集。能否提供应用程序的完整日志
纱线日志-applicationId application\u XXX
我没有使用纱线启动群集。
Py4JJavaError: An error occurred while calling o1876.parquet.
: org.apache.spark.SparkException: Job aborted.
[...]
Caused by: java.lang.IllegalStateException: SparkContext has been shutdown
    at org.apache.spark.SparkContext.runJob(SparkContext.scala:2014)
    at org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$write$1.apply$mcV$sp(FileFormatWriter.scala:188)