在运行时增加PySpark可用的内存

Ale*_*ord 27 apache-spark pyspark

我正在尝试使用Spark构建一个推荐程序,但内存不足:

Exception in thread "dag-scheduler-event-loop" java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

我想通过spark.executor.memory在运行时修改PySpark中的属性来增加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)
Run Code Online (Sandbox Code Playgroud)

回:

ValueError: Cannot run multiple SparkContexts at once;
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为:

>>> sc
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sc' is not defined
Run Code Online (Sandbox Code Playgroud)

abb*_*obh 38

当我需要重新启动shell并使用不同的命令打开时,我不确定为什么你选择上面的答案!虽然这有用并且很有用,但是有一个实际上被请求的内联解决方案.这基本上是上面评论中引用的@ zero323,但链接导致描述Scala中的实现.以下是专门针对PySpark的工作实现.

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

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

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

ps如果你需要关闭SparkContext只需使用:

SparkContext.stop(sc)
Run Code Online (Sandbox Code Playgroud)

并仔细检查您可以使用的已设置的当前设置:

sc._conf.getAll()
Run Code Online (Sandbox Code Playgroud)


Ha *_*ham 35

您可以spark.executor.memory在开始时设置pyspark-shell

pyspark --num-executors 5 --driver-memory 2g --executor-memory 2g
Run Code Online (Sandbox Code Playgroud)