我目前在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文件的数据帧无论如何都会被分发,所以我仍然认为你不需要那么多。