如何使用新的Spark Context



我目前在GCP dataproc上运行jupyter笔记本,并希望通过我的配置增加可用内存:

我首先停止了我的spark context:

import pyspark
sc = spark.sparkContext
sc.stop()

等待运行下一个代码块,以便sc.stop()可以完成

conf = pyspark.SparkConf().setAll([('spark.driver.maxResultSize','8g')])
sc = pyspark.SparkContext(conf=conf)

但是当我运行data = spark.read.parquet('link to data bucket')时,它会引发

Py4JJavaError: An error occurred while calling o152.parquet.
: java.lang.IllegalStateException: Cannot call methods on a stopped SparkContext.
This stopped SparkContext was created at:
...
The currently active SparkContext was created at:
...

如果我在启动新的pyspark笔记本时使用最初提供的spark上下文,那么上面的行运行良好。这个错误意味着,虽然我创建了一个新的spark上下文,每当我通过spark调用方法时,它仍然指向旧的上下文。我将如何使用我创建的新SparkContext ?

您已经创建了一个SparkContext,而不是一个新的SparkSession。

你需要在停止上下文后使用spark = SparkSession.builder.config(key, value).getOrCreate()

或者(推荐)您还应该能够在Notebook的环境变量中设置PYSPARK_SUBMIT_ARGS='-c spark.driver.maxResultSize=8g',并且它应该实现类似的目标。

aside:8g对于笔记本驱动程序来说有点过分。也许你是想改变执行者记忆?而且你的read parquet文件的数据帧无论如何都会被分发,所以我仍然认为你不需要那么多。

相关内容

  • 没有找到相关文章

最新更新