Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 增加PySpark在运行时的可用内存_Apache Spark_Pyspark - Fatal编程技术网

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

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

我正在尝试使用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
>>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”?