Apache spark 增加PySpark在运行时的可用内存
我正在尝试使用Spark构建推荐程序,但内存不足:Apache spark 增加PySpark在运行时的可用内存,apache-spark,pyspark,Apache Spark,Pyspark,我正在尝试使用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
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
>>sc
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“sc”
您可以在启动pyspark shell时设置spark.executor.memory
pyspark --num-executors 5 --driver-memory 2g --executor-memory 2g
我不知道当需要重新启动shell并使用不同的命令打开时,为什么选择上面的答案!虽然这是有效的,而且很有用,但是有一个在线解决方案,这就是实际需要的。这本质上是@zero323在上面的评论中引用的内容,但是链接导致了一篇描述Scala实现的文章。下面是一个专门针对PySpark的工作实现
注意:您要修改其设置的SparkContext必须尚未启动,否则需要将其关闭、修改设置并重新打开
from pyspark import SparkContext
SparkContext.setSystemProperty('spark.executor.memory', '2g')
sc = SparkContext("local", "App Name")
资料来源:
p、 美国。如果需要关闭SparkContext,只需使用:
SparkContext.stop(sc)
要再次检查已设置的当前设置,您可以使用:
sc._conf.getAll()
据我所知,无法在运行时更改spark.executor.memory。数据节点上的容器将在spark上下文初始化之前创建 引用,在2.0.0之后,您不必使用SparkContext
,而是使用SparkSession
和conf
方法,如下所示:
spark.conf.set("spark.executor.memory", "2g")
“在运行时”是什么意思?通过修改现有的SparkContext
?是的,完全正确。我想增加PySpark会话中的内存量。在会话中,您可以使用特定的设置,但据我所知,您无法修改现有设置。您需要停止上下文:sc.stop()
这是Scala,而不是Python。虽然这确实有效,它没有直接处理用例,因为它需要更改python/pyspark的启动方式。对于那些需要解决内联用例的人,请参考abby的答案。这在我的案例中效果更好,因为会话中的更改需要重新验证!我到处找这个!有没有办法将其设置为“max”?