我正在尝试使用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()