Skip to main content
 首页 » 编程设计

apache-spark之在运行时增加PySpark可用的内存

2024年10月25日10tintown

我正在尝试使用Spark构建推荐器,但内存不足:

Exception in thread "dag-scheduler-event-loop" java.lang.OutOfMemoryError: Java heap space 

我想通过在运行时修改PySpark中的 spark.executor.memory属性来增加Spark可用的内存。

那可能吗?如果是这样,怎么办?

更新

受@ zero323注释中的链接启发,我尝试删除并重新创建PySpark中的上下文:
del sc 
from pyspark import SparkConf, SparkContext 
conf = (SparkConf().setMaster("http://hadoop01.woolford.io:7077").setAppName("recommender").set("spark.executor.memory", "2g")) 
sc = SparkContext(conf = conf) 

回:
ValueError: Cannot run multiple SparkContexts at once; 

这很奇怪,因为:
>>> sc 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
NameError: name 'sc' is not defined 

请您参考如下方法:

我不确定在需要重新启动Shell并使用其他命令打开时为什么选择上面的答案!尽管这种方法行之有效并且很有用,但是有一个实际需要的在线解决方案。这实际上是上面注释中引用的@ zero323,但是该链接指向描述Scala中实现的文章。以下是专门针对PySpark的有效实现。

注意:您必须尚未启动要为其修改设置的SparkContext,否则您将需要关闭它,修改设置并重新打开。

from pyspark import SparkContext 
SparkContext.setSystemProperty('spark.executor.memory', '2g') 
sc = SparkContext("local", "App Name") 

资源:
https://spark.apache.org/docs/0.8.1/python-programming-guide.html

ps。如果您需要关闭SparkContext,请使用:
SparkContext.stop(sc) 

并仔细检查已设置的当前设置,可以使用:
sc._conf.getAll()